Подтверждайте сообщение или фиксируйте offset только после устойчивой записи результата. Повторная доставка должна быть безопасной благодаря идемпотентности или дедупликации.
Как гарантировать доставку/обработку сообщения после того, как consumer его прочитал?
Подтверждайте сообщение или фиксируйте offset только после устойчивой записи результата. Повторная доставка должна быть безопасной благодаря идемпотентности или дедупликации.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Подтверждайте сообщение или фиксируйте offset только после устойчивой записи результата. Повторная доставка должна быть безопасной благодаря идемпотентности или дедупликации.
Сам факт чтения из брокера не доказывает успешную обработку. Сохраните бизнес-изменения и ID обработанного события в одной транзакции БД, затем подтвердите сообщение. После сбоя повтор увидит уже записанный ID и не выполнит действие второй раз.
Для Kafka не фиксируйте offset дальше ещё не завершённого сообщения той же партиции при параллельной обработке. Неисправимые сообщения направляйте в управляемый разбор с мониторингом, а не бесконечный retry. Для внешнего необратимого действия отдельно нужен идемпотентный контракт с получателем.