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

Повторная доставка сообщения

Вопрос

Потребитель обработал сообщение «начислить бонусы», но упал до подтверждения (commit offset или ack). После рестарта он получит это сообщение снова. Что должно быть в системе, чтобы бонусы не начислились дважды?

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

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

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

Коротко

Правильный ответ: Идемпотентный потребитель: проверка по id, что операция уже выполнена. Семантика «хотя бы один раз» (at least once) самая распространённая и означает возможные дубли.

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

  1. Идемпотентный потребитель: проверка по id, что операция уже выполненаправильный ответ
  2. Ничего: брокер помнит доставленные сообщения и не допустит повтора
  3. Больше партиций в топике, чтобы повтор попал к другому потребителю
  4. Увеличить таймаут подтверждения, чтобы потребитель успевал сделать commit

Разбор

Семантика «хотя бы один раз» (at least once) самая распространённая и означает возможные дубли. Защита на стороне потребителя: хранить id обработанных сообщений или делать операцию идемпотентной (например уникальный ключ на начисление). Тест: отправить одно и то же сообщение дважды и проверить, что эффект один. Число партиций и таймауты дубли не убирают.

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

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