我正在尝试使用远程分区[主从方法]的Spring Batch。 我有一个主步骤,通过 KAFKA 将记录发送到工作节点。 一切工作正常,直到并行作业执行完成
场景: 我启动了一个包含 50k 记录的作业,这些记录被发送到工作节点进行处理,大约在同一时间,我启动了另一个只有 100 条记录的作业,其中相同的工作节点监听 kafka 主题以获取记录
我看到工作节点首先获取 50k 条记录并处理它,然后获取另一个作业的 100 条记录,
执行具有 100 条记录的作业真的应该等待具有 50K 记录的作业来处理吗?
在处理器中添加一个任务执行器使其异步可以使处理器与分配的线程一样快,但问题是等待 100 条记录作业
是的,我在同一个 JVM 中运行这两个作业。
我一般不推荐这样做,在分区情况下更不推荐。原因是不可能独立扩展这些工作。
如果您使用
MessageChannelPartitionHandler
,那么您需要将其设置为步进范围以避免消息交叉。在其 javadocs: 中有关于此的注释
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.