繁体   English   中英

Spring 批处理集成远程分区 - 运行并行作业

[英]Spring batch integration remote partitioning - running parallel jobs

我们有一个用例,我们需要从一些分页 API 读取数据并写入一些下游的 Kafka 主题。

我们已经能够通过spring 批处理集成远程分区来实现该解决方案,其中管理器通过创建 executionContext 来处理任务的分区,其中包含要读取数据的页码和偏移量。 管理器创建这个 executionContext 并将它们放在 messagesChannel 上(我可以使用 rabbitMQ 和 Kafka 主题,无论哪个提供了解决方案)。 工人(超过 1 个)从消息通道中选择那些 executionContext 并完成从 API 读取数据并将其写入所需的 Kafka 主题的任务。

上面的实现工作得很好。 如果我一个接一个地为不同的客户端运行相同的作业,这也可以正常工作。 当我们想要为多个客户端并行运行相同的作业时,挑战就来 例如,我们并行启动 2 个客户端的作业。 它为每个客户创建 1 个经理和 2 个工作人员。 现在问题来了,当两个管理器都将 executionContext 推送到同一个 messagesChannel并且工作人员不知道选择和执行哪个时。 此外,这两个作业共享相同的数据库 spring 批处理表,所以我怀疑它也会在该级别产生问题。

关于如何实现并行运行多个 spring 批处理报告器分区作业的任何输入或参考

在这样的设置中, MessageChannelPartitionHandler应该是步进范围的。 在 Javadoc 中有一个注释:

Note: The reply channel for this is instance based.
Sharing this component across multiple step instances may result in the
crossing of messages. It's recommended that this component be step or job scoped.

使这个 bean 成为 step-scoped 应该可以解决这个问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM