Выбор ответа Senior Асинхронные интеграции и брокеры обновлено
Transactional outbox
Вопрос
Сервис сохраняет заказ в БД и публикует OrderCreated в Kafka. Иногда заказ есть, а события нет. Какое решение устраняет причину?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Transactional outbox: событие пишется в той же транзакции, что и заказ. Две независимые записи (БД и брокер) не атомарны: между ними процесс может упасть.
Варианты ответа
- Сначала публиковать событие в Kafka, а потом сохранять заказ в БД
- Публиковать событие дважды подряд, чтобы хотя бы одно дошло
- Увеличить таймаут публикации в Kafka и число повторов продюсера
- Transactional outbox: событие пишется в той же транзакции, что и заказправильный ответ
Разбор
Две независимые записи (БД и брокер) не атомарны: между ними процесс может упасть. Outbox превращает публикацию в часть локальной транзакции, а доставку в брокер делает надёжный фоновый процесс (поллер или CDC). Смена порядка даёт обратную проблему: событие без заказа. Таймаут не помогает при падении процесса. Двойная публикация создаёт дубли и не решает потерю.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.