如果我有一个简单的JEE批处理作业,可以使用可以并行处理数据的步骤。
我想从不同的源读取数据,因为它们是独立的 - 它可以在多个线程中同时完成。
步:
<step id="step1">
<chunk checkpoint-policy="item" item-count="15">
<reader ref="MyReader">
<properties>
<!-- some properties -->
</properties>
</reader>
<processor ref="MyProcessor"></processor>
<writer ref="MyWriter"></writer>
</chunk>
<partition>
<mapper ref="MyPartitionMapper"/>
</partition>
</step>
让我们说,我的reader
,正在使用checkpoint
,因为如果出现错误,我想重新启动分区并仅处理尚未读取和处理的数据。
问题:如果我有这样的场景(多个数据源,并行读取),是否可以重新启动作业或分区,以防出现为此特定分区保存检查点的错误?
换句话说,即使我必须重新启动作业,我是否会为每个分区保存单独的检查点,因此对于每个数据源,我只读取新数据(尚未处理)?
我只是想知道这个问题的答案,所以我挖到了JSR 352 standard。报价:
由于每个线程都运行该步骤的单独副本,因此对于块类型步骤,在每个线程上独立地进行分块和检查点。
JBeret's PartitionExecutionImpl类根据索引显示为每个分区存储的数据。只要索引在运行期间保持一致,检查点就应该是每个分区。