После обнаружения отказа партиции назначат живому consumer, который продолжит с последнего зафиксированного offset. Сообщение может обработаться повторно, поэтому побочные эффекты должны быть идемпотентными.
Что произойдёт, если pod с Kafka consumer упадёт во время обработки сообщения до коммита offset?
После обнаружения отказа партиции назначат живому consumer, который продолжит с последнего зафиксированного offset. Сообщение может обработаться повторно, поэтому побочные эффекты должны быть идемпотентными.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Что произойдёт, если pod с Kafka consumer упадёт во время обработки сообщения до коммита offset?
Ответ
После обнаружения отказа партиции назначат живому consumer, который продолжит с последнего зафиксированного offset. Сообщение может обработаться повторно, поэтому побочные эффекты должны быть идемпотентными.
Если обработчик уже записал результат в БД, но не успел commit offset, новый consumer снова получит запись. Подтверждение после обработки даёт основу at-least-once, но требует дедупликации по event_id или другой устойчивой бизнес-идентичности. При ошибочной фиксации offset до завершения работы сообщение можно потерять для этого приложения. Время восстановления зависит от обнаружения отказа и rebalance. Транзакции Kafka помогают внутри Kafka-контура, но не делают произвольную внешнюю БД атомарной с offset автоматически.