Выбор ответа Senior Асинхронные интеграции и брокеры обновлено

Transactional outbox

Вопрос

Сервис сохраняет заказ в БД и публикует OrderCreated в Kafka. Иногда заказ есть, а события нет. Какое решение устраняет причину?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Transactional outbox: событие пишется в той же транзакции, что и заказ. Две независимые записи (БД и брокер) не атомарны: между ними процесс может упасть.

Варианты ответа

  1. Сначала публиковать событие в Kafka, а потом сохранять заказ в БД
  2. Публиковать событие дважды подряд, чтобы хотя бы одно дошло
  3. Увеличить таймаут публикации в Kafka и число повторов продюсера
  4. Transactional outbox: событие пишется в той же транзакции, что и заказправильный ответ

Разбор

Две независимые записи (БД и брокер) не атомарны: между ними процесс может упасть. Outbox превращает публикацию в часть локальной транзакции, а доставку в брокер делает надёжный фоновый процесс (поллер или CDC). Смена порядка даёт обратную проблему: событие без заказа. Таймаут не помогает при падении процесса. Двойная публикация создаёт дубли и не решает потерю.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.