Почему именно Transactional Outbox — ведь можно было сделать иначе, например коммитить в Kafka только после успешной отправки?

Outbox решает разрыв между commit бизнес-данных в БД и публикацией события: оба намерения сохраняются одной локальной транзакцией. Поздний commit Kafka offset решает другую часть задачи и не закрывает этот разрыв.

Короткий ответ

Что ответить на собеседовании

Outbox решает разрыв между commit бизнес-данных в БД и публикацией события: оба намерения сохраняются одной локальной транзакцией. Поздний commit Kafka offset решает другую часть задачи и не закрывает этот разрыв.

Подробный разбор

Ответ с пояснениями

Outbox решает разрыв между commit бизнес-данных в БД и публикацией события: оба намерения сохраняются одной локальной транзакцией. Поздний commit Kafka offset решает другую часть задачи и не закрывает этот разрыв.

Если сначала изменить БД, а потом отправить сообщение, процесс может упасть между действиями; при обратном порядке возможно событие без сохранённого изменения. Worker читает outbox, повторяет отправку и отмечает результат. Дубли всё ещё возможны, поэтому получателю нужна идемпотентность. Если БД вообще не участвует и обработка целиком Kafka-to-Kafka, Kafka transactions могут быть подходящим другим решением.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее