0

我是 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但这些书中也没有任何内容可以回答我的问题。

4

1 回答 1

0

我认为你不能这样做,因为 Table 自然是未排序的。如果您需要以某种方式对它们进行排序,请添加由 writer 管理的 order 列。第一个分区写入 1-100,第二个分区写入 101-200,依此类推。下一步阅读器将按 [order column] 获取项目订单。由于先前分区器中缺少写入而导致的订单列之间的空洞不是问题。我的 2 美分

于 2013-08-13T09:19:48.643 回答