20

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

ответ

31

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

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

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

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

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

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

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

Смежные вопросы