【问题标题】:Spring Batch running in Kubernetes在 Kubernetes 中运行的 Spring Batch
【发布时间】:2021-06-16 22:03:31
【问题描述】:

我有一个 Spring Batch,它划分为“Slave Steps”并在线程池中运行,这是配置:Spring Batch - FlatFileItemWriter Error 14416: Stream is already closed

我想在 Kubernetes 中运行这个 Spring Batch Job。我查看了这篇文章:@MAHMOUD BEN HASSINE 的https://spring.io/blog/2021/01/27/spring-batch-on-kubernetes-efficient-batch-processing-at-scale

来自帖子,关于段落:

  1. 选择正确的 Kubernetes 作业并发策略 正如我之前指出的,Spring Batch 阻止了 相同的作业实例。因此,如果您遵循“每个 Spring 的 Kubernetes 作业 批处理作业实例”部署模式,设置作业的 spec.parallelism 到高于 1 的值没有意义,因为这 并行启动两个 pod,其中一个肯定会失败 JobExecutionAlreadyRunningException。但是,设置一个 spec.parallelism 到高于 1 的值对于 分区作业。在这种情况下,分区可以并行执行 豆荚。正确选择并发策略与 选择了哪种工作模式(如第 3 点所述)。

查看我的批处理作业,如果我启动 2 个或更多 pod,听起来一个/多个 pod 会失败,因为它会尝试启动同一个作业。但另一方面,由于我使用的是分区作业,因此听起来更多的 pod 将并行运行。

我的 Spring Batch 似乎类似于 https://kubernetes.io/docs/tasks/job/fine-parallel-processing-work-queue/

这就是说,什么是正确的做法呢?我应该在我的部署中设置多少个 pod? 分区/线程将在单独/不同的 pod 上运行,还是线程将仅在一个 pod 中运行? 我在哪里定义它,在并行性中?还有并行度,应该和线程数一样吧?

谢谢!马库斯。

【问题讨论】:

    标签: spring kubernetes spring-batch


    【解决方案1】:

    一个线程在 JVM 中运行,该 JVM 在容器中运行,而容器又在 Pod 中运行。所以说在不同的 Pod 上运行不同的线程是没有意义的。

    Spring Batch 中的分区技术可以是本地的(同一 JVM 中的多个线程,其中每个线程处理不同的分区)或远程(多个 JVM 处理不同的分区)。本地分区需要一个 JVM,因此您只需要一个 Pod。远程分区需要多个 JVM,所以需要多个 Pod。

    我有一个 Spring Batch,它划分为“从属步骤”并在线程池中运行

    由于您使用工作线程池实现了本地分区,因此您只需要一个 Pod 即可运行分区作业。

    【讨论】:

    • 如果不是运行多个线程,而是在不同的 pod 中运行多个作业,我会使用远程分区(类似这样:dataflow.spring.io/docs/feature-guides/batch/partitioning),其中 grid_size 将是并发数,并按顺序排列 pod/hubernet 的作业并行度?
    • 好的,在远程分区设置中,您将有一个用于管理器的作业模板(并行度为 1)和用于工作人员的作业模板(并行度为 1 或更多,可能等于网格大小,但这不是必需的,因为您可以拥有比分区更多的工作人员,反之亦然)。每个分区有一个 Job 的想法是,如果一个分区失败(即 kubernetes 创建的第一个 Pod 失败),kubernetes 将自动为该分区创建另一个 Pod。因此,您可以自动重启失败的分区,直到所有分区都成功执行,无需人工干预
    • 那么在这种情况下,我需要一个队列,经理将作业放置在其中,工作人员从队列中拉出。对吗?
    • 是的,远程分区需要一个队列,请在此处查看文档:docs.spring.io/spring-batch/docs/4.3.x/reference/html/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-15
    • 1970-01-01
    • 2019-10-14
    相关资源
    最近更新 更多