Повторная доставка сообщения
Вопрос
Потребитель обработал сообщение «начислить бонусы», но упал до подтверждения (commit offset или ack). После рестарта он получит это сообщение снова. Что должно быть в системе, чтобы бонусы не начислились дважды?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Варианты ответа
- Идемпотентный потребитель: проверка по id, что операция уже выполненаправильный ответ
- Ничего: брокер помнит доставленные сообщения и не допустит повтора
- Больше партиций в топике, чтобы повтор попал к другому потребителю
- Увеличить таймаут подтверждения, чтобы потребитель успевал сделать commit
Разбор
Семантика «хотя бы один раз» (at least once) самая распространённая и означает возможные дубли. Защита на стороне потребителя: хранить id обработанных сообщений или делать операцию идемпотентной (например уникальный ключ на начисление). Тест: отправить одно и то же сообщение дважды и проверить, что эффект один. Число партиций и таймауты дубли не убирают.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.