首页 > 解决方案 > Kubernetes 上的批处理

问题描述

这里的任何人都有关于 kubernetes 批处理(例如春季批处理)的经验吗?这是个好主意吗?如果我们使用 kubernetes 自动缩放功能,如何防止批处理处理相同的数据?谢谢你。

标签: kubernetesspring-batchbatch-processing

解决方案


这里的任何人都有关于 kubernetes 批处理(例如春季批处理)的经验吗?这是个好主意吗?

对于 Spring Batch,我们(Spring Batch 团队)确实有一些经验,我们在以下会谈中分享:

在 Kubernetes 上运行批处理作业可能会很棘手:

  • pod 可能在处理过程中被不同节点上的 k8s 重新调度
  • cron 作业可能会被触发两次
  • ETC

这需要在开发人员方面进行额外的重要工作,以确保批处理应用程序具有容错性(对节点故障、Pod 重新调度等具有弹性)并且可以安全地防止在集群环境中重复执行作业。

Spring Batch 为您处理了这些额外的工作,并且可以成为在 k8s 上运行批处理工作负载的不错选择,原因如下:

  • 成本效率: Spring Batch 作业在外部数据库中维护其状态,这使得在作业/节点故障或 Pod 重新调度的情况下可以从最后一个保存点重新启动它们
  • 鲁棒性:借助集中式作业存储库,可防止重复作业执行
  • 容错:重试/跳过失败的项目,以防出现暂时性错误,例如对可能暂时关闭或在云环境中重新安排的 Web 服务的调用

我写了一篇博客文章,在其中我通过代码示例详细解释了所有这些方面。你可以在这里找到它:Kubernetes 上的 Spring Batch:大规模高效批处理

如果我们使用 kubernetes 自动缩放功能,如何防止批处理处理相同的数据?

让每个作业处理不同的数据集是可行的方法(例如,每个文件一个作业)。但是您可能对不同的模式感兴趣,请参阅k8s 文档中的作业模式


推荐阅读