Подтвердить что ты не робот

Как работает перебалансировка потребителей в Кафке?

Когда новый потребитель/брокер добавляется или опускается, Kafka запускает операцию ребалансировки. Кафка перебалансирует операцию блокировки. Покупатели Kafka заблокированы во время операции по перебалансировке?

4b9b3361

Ответ 1

Зависит от того, что вы подразумеваете под "заблокированным". Если вы имеете в виду "существующие соединения закрыты при срабатывании балансировки", тогда ответ "да". Текущий алгоритм перебалансировки Кафки, к сожалению, несовершенен.

Вот что происходит во время балансировки потребления.

Предположим, что у нас есть тема с 10 разделами (0-9), и один потребитель (позволяет назвать ее consumer1), потребляя ее. Когда появляется второй потребитель (consumer2), задача перебалансировки запускается для обоих из них (consumer1 получает событие, consumer2 выполняет начальную балансировку). Теперь consumer1 закрывает все существующие соединения (даже те, которые будут вскоре открываться) и освобождает владельца раздела в Zookeeper для всех 10 разделов.

Затем он запускает алгоритм назначения разделов и решает, какие разделы должны быть заявлены, и снова заявляет право собственности на раздел в Zookeeper. Если заявка прошла успешно, consumer1 начинает получать свои новые разделы.

Между тем consumer2 также запускает алгоритм назначения разделов и пытается также потребовать свои разделы в Zookeeper. Требование будет выполнено только тогда, когда consumer1 освободит право собственности на эти разделы. Когда заявка успешна consumer2 начинает выборку или если она не может требовать разделов в заданном количестве повторений, вы получаете исключение rebalance failed after n retries.

Как вы заметили, вместо того, чтобы просто закрывать соединения и освобождать право собственности на разделы, consumer1 больше не принадлежит, он излишне закрывает ВСЕ его соединения и перезапускает с меньшим количеством разделов. Та же история с добавлением разделов (когда мы потребляем фильтр подстановки и появляется новая тема) - ВСЕ соединения закрываются, а затем снова открываются вместо того, чтобы просто открывать новые.

Итак, я надеюсь, что это ответит на ваш вопрос - выборки останавливаются, когда происходит перебалансировка.