Вопрос проверяет понимание гарантий доставки сообщений и различий между хранением и фактической обработкой.
Само по себе хранение сообщения в брокере не гарантирует его доставку consumer’у. Гарантии зависят от конфигурации брокера, producer’а и consumer’а. Возможны потери, дублирование или повторная обработка. Для надежной доставки нужны дополнительные механизмы. Поэтому всегда важно понимать выбранную модель доставки.
Хранение сообщения в брокере — это лишь часть цепочки доставки, а не абсолютная гарантия.
Под гарантией доставки обычно понимают, что сообщение:
не потеряется
будет доставлено consumer’у
будет обработано корректно
Но брокер отвечает только за хранение и передачу, а не за бизнес-обработку.
В системах сообщений используются три основные модели:
At most once
Сообщение может быть потеряно, но не будет доставлено повторно.
At least once
Сообщение доставляется минимум один раз, возможны дубликаты.
Exactly once
Сообщение доставляется и обрабатывается ровно один раз.
Хранение сообщения обычно обеспечивает максимум at least once, но не автоматически.
Даже если сообщение записано в брокер:
consumer может упасть до коммита
offset может быть зафиксирован раньше обработки
producer может отправить сообщение повторно
сеть может дать сбой
Без корректной логики consumer’а сообщение:
потеряется
обработается дважды
останется необработанным
стратегия коммита offset’ов
idempotent-обработка
retry-механизмы
настройки брокера
Вывод: хранение сообщения — необходимое, но недостаточное условие надежной доставки.