我有一个Spring批处理,它划分为“从属步骤”并在线程池中运行,下面是配置:Spring批处理-FlatFileItemWriter错误14416:流已关闭
我想在Kubernetes中运行这个Spring批处理作业。我检查了这个帖子:https://spring.io/blog/2021/01/27/spring-batch-on-kubernetes-efficient-batch-processing-at-scale作者@MAHMOUD BEN HASSINE。
从帖子中,在段落上:
查看我的批处理作业,如果我启动 2 个或更多 pod,听起来一个或多个 pod 会失败,因为它会尝试启动相同的作业。但另一方面,听起来更多的 pod 将并行运行,因为我使用的是分区作业。
我的Spring批次似乎类似于https://kubernetes.io/docs/tasks/job/fine-parallel-processing-work-queue/
这就是说,正确的方法是什么?我应该在部署中设置多少个pod?分区/线程将在单独/不同的pod上运行,还是线程将在一个pod中运行?我在哪里定义它,在并行性中?并行性,它应该与线程数相同吗?
谢谢你!马库斯。
线程在JVM中运行,JVM在容器中运行,容器又在Pod中运行。因此,谈论在不同的Pod上运行不同的线程是没有意义的。
SpringBatch中的分区技术可以是本地的(同一JVM中的多个线程,每个线程处理不同的分区),也可以是远程的(多个JVM处理不同分区)。本地分区需要一个JVM,因此只需要一个Pod。远程分区需要多个JVM,因此需要多个Pod。
我有一个Spring批处理,它被划分成“从属步骤”,并在一个线程池中运行
由于您使用一个工作线程池实现了本地分区,因此您只需要一个Pod来运行您的分区作业。