Я просмотрел множество разных статей о транзакциях Apache Kafka, восстановлении и новых функциях, появляющихся только один раз. Все еще не понимаю проблемы с восстановлением потребителя. Как быть уверенным, что каждое сообщение из очереди будет обработано даже в случае смерти одного из потребителей?
Допустим, у нас есть раздел темы, назначенный потребителю. Потребитель опрашивает сообщение и начинает работать над ним. И отключился из-за сбоя питания без фиксации. Что будет? Будет ли другой потребитель из той же группы повторно опрашивать это сообщение?




Потребители периодически посылают сердцебиение, сообщая брокеру, что они живы. Если брокер не получает контрольные сообщения от потребителя, он считает потребителя мертвым и переназначает его разделы. Таким образом, если потребитель умирает, его разделы будут назначены другому потребителю из группы, а незафиксированные сообщения будут отправлены новому назначенному потребителю.
Да например в javadoc.
Мне очень жаль, что я повторяю тот же вопрос, но где именно в javadoc сказано, что незафиксированные сообщения будут отправлены новому назначенному потребителю? Вы можете процитировать, пожалуйста?
Он говорит: При каждом опросе потребитель будет пытаться использовать последнее использованное смещение в качестве начального смещения и производить выборку последовательно. Последнее использованное смещение может быть установлено вручную с помощью поиска (TopicPartition, long) или автоматически установлено как последнее зафиксированное смещение для подписанного списка разделов. Итак, когда потребитель получает новые разделы от мертвого потребителя, он начинает с последнего зафиксированного смещения.
Но лучше процитировать здесь: Поскольку потребитель в группе читает сообщения из разделов, назначенных координатором, он должен зафиксировать смещения, соответствующие прочитанным им сообщениям. Если потребитель выйдет из строя или выключен, его разделы будут переназначены другому члену, который начнет потребление с последнего зафиксированного смещения каждого раздела. Если потребитель выйдет из строя до того, как какое-либо смещение было зафиксировано, то потребитель, который берет на себя его разделы, будет использовать политику сброса.
Спасибо тебе, Катя!
«Незафиксированные сообщения будут отправлены новому назначенному потребителю» - есть ли статья или документация, описывающая такое поведение?