Выбор ответа Middle Очереди и события спрашивают часто обновлено

Дубли при at-least-once

Вопрос

Консьюмер обработал сообщение «начислить бонусы», но упал до коммита offset. После рестарта сообщение пришло снова. Как правильно защититься?

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

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

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

Коротко

Правильный ответ: Идемпотентный обработчик: id сообщения с UNIQUE в той же транзакции. At-least-once означает возможные повторы, поэтому побочные эффекты делают идемпотентными: таблица обработанных id с уникальным ключом в одной транзакции с начислением.

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

  1. Включить exactly-once в настройках брокера, и дублей не будет во внешней БД
  2. Коммитить offset до обработки, чтобы повторной доставки не было
  3. Идемпотентный обработчик: id сообщения с UNIQUE в той же транзакцииправильный ответ
  4. Увеличить таймаут сессии консьюмера, чтобы он не терял сообщение

Разбор

At-least-once означает возможные повторы, поэтому побочные эффекты делают идемпотентными: таблица обработанных id с уникальным ключом в одной транзакции с начислением. Exactly-once в Kafka работает внутри Kafka (читать-обработать-записать в Kafka), но не защищает запись во внешнюю БД. Коммит до обработки даёт at-most-once: при падении сообщение потеряется. Таймаут сессии на повторы после падения не влияет.

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

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