Exactly-once при обработке сообщений
Вопрос
Команда хочет «exactly-once» обработку платёжных событий из брокера с записью в PostgreSQL. Какой подход реально даёт эффект «ровно один раз»?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Варианты ответа
- Включить в брокере режим exactly-once, и повторов не будет и в базе
- Подтверждать сообщение до обработки, тогда повторной доставки не будет
- Обрабатывать все сообщения в одном потоке строго по порядку
- At-least-once плюс id сообщения в той же транзакции под uniqueправильный ответ
Разбор
Гарантии брокера заканчиваются на брокере: exactly-once в Kafka касается цепочек чтение-обработка-запись внутри Kafka (транзакции), а запись во внешнюю БД и подтверждение офсета это две разные системы, между ними всегда возможен сбой. Рабочая схема: брокер доставляет хотя бы один раз, обработчик идемпотентен. Надёжнее всего записать id сообщения в таблицу обработанных в той же транзакции, что и бизнес-изменение: повтор упадёт на уникальном ограничении и будет пропущен.
Подтверждение до обработки даёт «не больше одного раза»: при падении сообщение потеряется. Один поток не убирает повторную доставку.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Предыдущий вопрос
Отложенные задачи: напоминание через 24 часа
Следующий вопрос
Лавина на популярном ключе кеша