kubernetes - Kubernetes 上的批处理
问题描述
这里的任何人都有关于 kubernetes 批处理(例如春季批处理)的经验吗?这是个好主意吗?如果我们使用 kubernetes 自动缩放功能,如何防止批处理处理相同的数据?谢谢你。
解决方案
这里的任何人都有关于 kubernetes 批处理(例如春季批处理)的经验吗?这是个好主意吗?
对于 Spring Batch,我们(Spring Batch 团队)确实有一些经验,我们在以下会谈中分享:
- Kubernetes 上的云原生批处理,作者 Michael Minella
- Kubernetes 上的 Spring Batch,由我编写。
在 Kubernetes 上运行批处理作业可能会很棘手:
- pod 可能在处理过程中被不同节点上的 k8s 重新调度
- cron 作业可能会被触发两次
- ETC
这需要在开发人员方面进行额外的重要工作,以确保批处理应用程序具有容错性(对节点故障、Pod 重新调度等具有弹性)并且可以安全地防止在集群环境中重复执行作业。
Spring Batch 为您处理了这些额外的工作,并且可以成为在 k8s 上运行批处理工作负载的不错选择,原因如下:
- 成本效率: Spring Batch 作业在外部数据库中维护其状态,这使得在作业/节点故障或 Pod 重新调度的情况下可以从最后一个保存点重新启动它们
- 鲁棒性:借助集中式作业存储库,可防止重复作业执行
- 容错:重试/跳过失败的项目,以防出现暂时性错误,例如对可能暂时关闭或在云环境中重新安排的 Web 服务的调用
我写了一篇博客文章,在其中我通过代码示例详细解释了所有这些方面。你可以在这里找到它:Kubernetes 上的 Spring Batch:大规模高效批处理
如果我们使用 kubernetes 自动缩放功能,如何防止批处理处理相同的数据?
让每个作业处理不同的数据集是可行的方法(例如,每个文件一个作业)。但是您可能对不同的模式感兴趣,请参阅k8s 文档中的作业模式。
推荐阅读
- sql - 如何选择包含关键字的行?
- javascript - 错误:无法在“节点”上执行“appendChild”:在 JavaScript 中使用微调器时,参数 1 不是“节点”类型
- python-3.7 - 如何修复“RuntimeError:生成器引发的 StopIteration”
- pandas - 如何将多索引熊猫数据框保存到镶木地板?
- javascript - 子域上的跨域 cookie 问题
- vue.js - Vue JS 填充数据时如何添加条件?
- javascript - 从一个文件扩展所有 Joi 验证包并使用 const Joi = require('joi') 导入所有
- machine-learning - 如何使用 k-means 聚类获得更多特征
- php - 多维数组的数组合并
- mongodb - 如何在 MongoDB 中关联两个集合