Гарантии доставки и дубли
Вопрос
Какие гарантии доставки бывают и как в реальной системе обеспечить, чтобы событие обработалось ровно один раз по смыслу?
Попробуйте сами
Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.
Показать ответ и разбор
Коротко
Что должно прозвучать в ответе
At most once, at least once, exactly once
Практика: at least once плюс идемпотентный потребитель
Таблица обработанных event_id или upsert, проверка версии
Outbox на стороне отправителя
DLQ и мониторинг
Что могут спросить следом
- Как сделать идемпотентным начисление бонусов?
- Что даёт exactly once в Kafka и где он заканчивается?
Разбор
At most once теряет сообщения при сбоях, at least once может прислать дубль, exactly once означает ровно один раз. На практике выбирают at least once и делают потребителя идемпотентным: у каждого события уникальный id, потребитель в той же транзакции, что и бизнес-изменение, записывает id в таблицу обработанных и на повтор ничего не делает. Или операция сама по себе безопасна: upsert, установка статуса с проверкой версии. Отправитель публикует через outbox, чтобы событие не потерялось. Exactly once в Kafka работает внутри Kafka, на внешнюю базу он не распространяется, поэтому идемпотентность всё равно нужна. Плюс DLQ и мониторинг лага.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.