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

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

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

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

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

4b9b3361

Ответ 1

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

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

Теперь более подробно.

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

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

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

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

Ответ 2

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

Ответ 3

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

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

а также

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