Почему потребители Kafka подключаются к zookeeper, а производители получают метаданные от брокеров?

Почему потребители подключаются к zookeeper для получения местоположения разделов? И производители кафки должны подключиться к одному из брокеров для получения метаданных.

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

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


person Luckl507    schedule 13.01.2015    source источник


Ответы (3)


Прежде всего, zookeeper нужен только потребителю высокого уровня. SimpleConsumer для работы не требуется zookeeper.

Основная причина, по которой zookeeper необходим высокоуровневому потребителю, заключается в отслеживании потребляемых смещений и балансировке нагрузки.

А теперь поподробнее.

Что касается отслеживания смещения, представьте следующий сценарий: вы запускаете потребителя, принимаете 100 сообщений и закрываете потребителя. В следующий раз, когда вы запустите своего потребителя, вы, вероятно, захотите возобновить работу с вашего последнего потребленного смещения (которое равно 100), а это означает, что вам нужно где-то сохранить максимальное потребляемое смещение. Здесь начинается работа zookeeper: он хранит смещения для каждой группы / темы / раздела. Таким образом, в следующий раз, когда вы запустите своего потребителя, он может спросить: «Эй, смотритель, с какого смещения я должен начать потребление?». Kafka фактически движется к тому, чтобы иметь возможность хранить смещения не только в zookeeper, но и в других хранилищах (на данный момент доступны только zookeeper и kafka хранилища смещений, и я не уверен, что kafka хранилище полностью реализовано).

Что касается балансировки нагрузки, количество создаваемых сообщений может быть довольно большим для обработки на одной машине, и вы, вероятно, захотите добавить вычислительную мощность в какой-то момент. Допустим, у вас есть тема со 100 разделами, и для обработки этого количества сообщений у вас есть 10 машин. На самом деле здесь возникает несколько вопросов:

  • как эти 10 машин должны делить разделы между собой?
  • что произойдет, если одна из машин умрет?
  • что произойдет, если вы захотите добавить еще одну машину?

И снова здесь начинается работа zookeeper: он отслеживает всех потребителей в группе, и каждый потребитель высокого уровня подписывается на изменения в этой группе. Дело в том, что когда потребитель появляется или исчезает, zookeeper уведомляет всех потребителей и запускает перебалансировку, чтобы они разделяли разделы примерно поровну (например, для балансировки нагрузки). Таким образом, он гарантирует, что если один из потребителей умрет, другие продолжат обработку разделов, принадлежащих этому потребителю.

person serejja    schedule 13.01.2015
comment
Спасибо за ответ, это проясняет, это то, о чем я догадывался, но нигде не нашел. Я также только что прочитал, что в версии 0.9 потребители больше не будут использовать zookeeper, и он используется только брокерами для выборов лидера и т. Д. - person Luckl507; 13.01.2015

В kafka 0.9+ был представлен новый Consumer API. Новым потребителям подключение к Zookeeper не требуется, поскольку групповая балансировка обеспечивается самой kafka.

person luka1983    schedule 15.07.2016

Вы правы, потребителям не нужно подключаться к ZooKeeper, поскольку kafka версии 0.9. Они переработали api и представили новый потребительский клиент:

В версии 0.9 представлена ​​бета-версия для недавно переработанного потребительского клиента. На высоком уровне основное отличие нового потребителя состоит в том, что он устраняет различие между «высокоуровневым» потребителем на основе ZooKeeper и «низкоуровневым» API SimpleConsumer, и вместо этого предлагает унифицированный потребительский API.

а также

Наконец, это завершает серию проектов, выполненных за последние несколько лет, чтобы полностью отделить клиентов Kafka от Zookeeper, тем самым полностью исключив зависимость клиента-клиента от ZooKeeper.

person xingbin    schedule 12.12.2018