Kubernetes 上的批处理

Dan*_*wan 7 batch-processing spring-batch kubernetes

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

Mah*_*ine 8

这里的任何人都有在 kubernetes 上进行批处理(例如 spring 批处理)的经验?这是个好主意吗?

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

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

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

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

Spring Batch 会为您处理这些额外的工作,出于以下几个原因,它可能是在 k8s 上运行批处理工作负载的不错选择:

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

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

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

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