Сохраняется ли контрольная точка для каждого раздела в JEE Batch Processing? - PullRequest
0 голосов
/ 09 ноября 2018

Если у меня есть простое пакетное задание 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, потому что в случае ошибки я хочу перезапустить раздел и обработать только данные, которые еще не были прочитаны и обработаны.

Вопрос: Если у меня есть такой сценарий (несколько источников данных, чтение параллельно), могу ли я перезапустить задание или раздел в случае ошибки с сохранением контрольной точки для этого конкретного раздела?

Другими словами, даже если мне придется перезапустить задание, у меня будет сохраняться отдельная контрольная точка для каждого раздела, поэтому для каждого источника данных я читаю только новые данные (еще не обработанные)?

1 Ответ

0 голосов
/ 13 марта 2019

Мне просто был интересен ответ на этот вопрос, поэтому я погрузился в стандарт JSR 352 .Цитата:

Поскольку каждый поток запускает отдельную копию шага, чанкинг и контрольные точки выполняются независимо в каждом потоке для шагов типа чанка.

Класс PartitionExecutionImpl JBeret показывает, что эти данные хранятся для каждого раздела на основе индекса.До тех пор, пока индекс одинаков для всех прогонов, контрольные точки должны быть для каждого раздела.

...