Поведение Kafka в случае сбоя потребителя

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

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

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
0
1 982
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Потребители периодически посылают сердцебиение, сообщая брокеру, что они живы. Если брокер не получает контрольные сообщения от потребителя, он считает потребителя мертвым и переназначает его разделы. Таким образом, если потребитель умирает, его разделы будут назначены другому потребителю из группы, а незафиксированные сообщения будут отправлены новому назначенному потребителю.

«Незафиксированные сообщения будут отправлены новому назначенному потребителю» - есть ли статья или документация, описывающая такое поведение?

Sergey 19.04.2018 11:24

Да например в javadoc.

Katya Gorshkova 19.04.2018 11:59

Мне очень жаль, что я повторяю тот же вопрос, но где именно в javadoc сказано, что незафиксированные сообщения будут отправлены новому назначенному потребителю? Вы можете процитировать, пожалуйста?

Sergey 20.04.2018 10:33

Он говорит: При каждом опросе потребитель будет пытаться использовать последнее использованное смещение в качестве начального смещения и производить выборку последовательно. Последнее использованное смещение может быть установлено вручную с помощью поиска (TopicPartition, long) или автоматически установлено как последнее зафиксированное смещение для подписанного списка разделов. Итак, когда потребитель получает новые разделы от мертвого потребителя, он начинает с последнего зафиксированного смещения.

Katya Gorshkova 20.04.2018 11:17

Но лучше процитировать здесь: Поскольку потребитель в группе читает сообщения из разделов, назначенных координатором, он должен зафиксировать смещения, соответствующие прочитанным им сообщениям. Если потребитель выйдет из строя или выключен, его разделы будут переназначены другому члену, который начнет потребление с последнего зафиксированного смещения каждого раздела. Если потребитель выйдет из строя до того, как какое-либо смещение было зафиксировано, то потребитель, который берет на себя его разделы, будет использовать политику сброса.

Katya Gorshkova 20.04.2018 11:17

Спасибо тебе, Катя!

Sergey 20.04.2018 12:20

Другие вопросы по теме