Вопрос проверяет понимание того, как брокер сообщений ведет себя при сбоях consumer’ов и как обеспечивается устойчивость обработки.
При временной недоступности consumer’а сообщения не пропадают и остаются в брокере. Они хранятся до тех пор, пока consumer не вернется и не продолжит чтение с последнего зафиксированного offset’а. Если используется группа consumer’ов, партиции могут быть перераспределены. Поведение зависит от настроек ретенции и commit-стратегии. В результате система остается работоспособной.
В брокерах сообщений, таких как Kafka, consumer считается временно отключившимся, если он перестает отправлять heartbeat’ы.
Сообщения:
записываются в партиции
хранятся независимо от состояния consumer’ов
удаляются только по правилам ретенции
Даже если consumer недоступен, брокер продолжает принимать новые сообщения.
Consumer читает сообщения, опираясь на offset:
последний зафиксированный offset — точка восстановления
незакоммиченные сообщения считаются необработанными
После восстановления consumer:
продолжает чтение с последнего commit’а
может повторно обработать часть сообщений
Если consumer входит в группу:
при его падении происходит rebalance
партиции перераспределяются между оставшимися consumer’ами
Когда consumer возвращается:
он может получить другие партиции
чтение начнется с актуальных offset’ов группы
Сообщения могут быть потеряны, если:
истек срок ретенции
consumer был недоступен слишком долго
Вывод: временная недоступность consumer’а не приводит к потере сообщений, если ретенция и commit-стратегия настроены корректно.