【发布时间】: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。
来自帖子,关于段落:
- 选择正确的 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