Получить доступ

Как устроена chunk-ориентированная обработка в Spring Batch и что она даёт?

MiddleSpring Batch и IntegrationSpring
Ещё спрашивают так:
  • Что такое chunk в Spring Batch?
Коротко

Chunk — порция: прочитать N записей по одной, обработать, записать пачкой в одной транзакции. Память ограничена размером чанка, а после сбоя задание продолжается с последнего закоммиченного чанка.

  • Размер чанка — компромисс: больше — быстрее, но дольше откат и больше повтор
  • Ошибка в чанке — откат и повтор, с skip — пропуск плохих записей
  • Reader должен уметь продолжить с позиции (ItemStream)

А ещё Партиционирование — параллельные чанки по диапазонам

Так подсказку видит пользователь sotto на живом собеседовании — за пару секунд, пока вы думаете вслух.

Подробно

Размер чанка задаёт компромисс: слишком маленький даёт много коммитов и накладных расходов, слишком большой удлиняет транзакцию и увеличивает потери при сбое. Ключевую роль играет JobRepository — он хранит метаданные о выполнении, благодаря чему упавшая работа перезапускается не с начала, а с последнего успешного чанка. Именно поэтому пакетная обработка на Spring Batch устойчивее самописного цикла: тот при падении на миллионной записи обычно требует ручного разбора. Полезно знать и про обработку сбойных записей — skip и retry с ограничениями позволяют не ронять всю работу из-за нескольких плохих строк.

Что хотят услышать

  • Схема read-process-write порциями.
  • Транзакция на чанк, память, перезапуск.

Частые ошибки

  • Ставить размер чанка равным всему объёму данных.
  • Писать пакетную обработку циклом без сохранения прогресса.

Проверьте себя

Один верный вариант. Подумайте, потом откройте ответ.

Показать варианты и ответ
  • ✓Элементы читаются и обрабатываются по одному, накапливаются до размера чанка и записываются пачкой в одной транзакции — при сбое повторяется только незавершённый чанк
  • ✗Все элементы читаются в память целиком, обрабатываются и пишутся одной транзакцией
  • ✗Каждый элемент обрабатывается в собственной транзакции
  • ✗Обработка идёт параллельно без транзакций вообще

Что спросят дальше

  • Как выбрать размер чанка?
  • Чем skip отличается от retry в Spring Batch?

Разбор темы

Связанные вопросы

Закрытая бета

Подсказки на собеседовании — в реальном времени

sotto слышит вопрос интервьюера и показывает короткий ответ и план, как в блоке «Коротко». Оставьте контакт — пришлём доступ и промокод.

  • Промокод на 2 часа — сверх пробных 30 минут
  • Программа для Windows — скачать сразу, войти — через Яндекс ID или VK ID
  • Прямая связь с разработчиком: что улучшить — сделаем