我是 Spring Batch 的新手,刚刚开始进行 POC,以证明 Spring Batch 能够在一小时内处理 1m 条记录。然而,该架构要求我们也展示水平可扩展性。
我已经通读了分区和远程分块策略。两者都对我有意义。两者之间的本质区别在于远程分块需要一个持久的消息队列,因为实际写入数据库或文件是从主服务器发生的。在分区中不需要持久消息队列,因为写入是从从站发生的。
然而,我完全迷失的地方是,如何确保这两种并行处理变体的结果以正确的顺序写出?.
让我们以分区为例。据我了解,如果将处理 1000 条记录的特定步骤分成 10 个并行步骤执行,每个执行都有自己的 Reader、Processor 和 Writer,那么其中一个执行很容易在另一个之前完成。结果是其中一个步骤执行的 ItemWriter 可以在处理记录 300-300 的结果写入同一个表之前将处理记录 300-400 的结果写入表,因为该特定步骤执行可能滞后。
这意味着现在我有一个输出表,它确实包含所有处理结果,但它们的排序顺序不正确。可能需要进一步的顺序处理,只需将它们恢复到从 1 到 1000 的正确排序顺序即可。
我很难理解,如何确保正确的排序输出,同时通过 Spring Batch 中描述的远程处理策略水平扩展系统。
这两本书我都读过。http://www.manning.com/templier/以及http://www.apress.com/9781430234524但这些书中也没有任何内容可以回答我的问题。