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

Гарантии доставки и дубли

Вопрос

Какие гарантии доставки бывают и как в реальной системе обеспечить, чтобы событие обработалось ровно один раз по смыслу?

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

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

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

Коротко

At most once теряет сообщения при сбоях, at least once может прислать дубль, exactly once означает ровно один раз.

Что должно прозвучать в ответе

  • 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 ошибок.