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

Почему производитель kafka берет конечную точку брокера при инициализации вместо zk

Если у меня есть несколько брокеров, какой брокер должен использовать мой продюсер? Нужно ли вручную переключать брокера, чтобы сбалансировать нагрузку? Также почему потребителю нужна только конечная точка zookeeper вместо конечной точки брокера?

быстрый пример из учебника:

> bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test 
> bin/kafka-console-consumer.sh --zookeeper localhost:2181 --topic test --from-beginning
4b9b3361

Ответ 1

какой брокер должен использовать мой продюсер?
Нужно ли мне вручную переключать брокера, чтобы сбалансировать нагрузку?

Kafka работает на кластере, то есть на множестве узлов, поэтому, производя что-либо, вам нужно сообщить ему LIST брокеров, которые вы настроили для своего приложения, ниже - небольшая заметка, взятая из их документации.

"metadata.broker.list" определяет, где Продюсер может найти одного или нескольких брокеров для определения Лидера для каждой темы. Это не обязательно должен быть полный набор брокеров в вашем кластере, но должен включать не менее двух, если первый брокер недоступен. Не нужно беспокоиться о том, чтобы выяснить, какой Брокер является лидером для темы (и раздела), Продюсер знает, как подключиться к Брокеру и запросить метаданные, а затем подключиться к правильному Брокеру.

Надеюсь, что это явное недоразумение

Также почему потребителю нужна только конечная точка zookeeper, а не конечная точка брокера

Это не является технически корректным, так как существуют два типа API-интерфейсов: высокий уровень и потребитель низкого уровня.

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

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

Ответ 2

Кафка устанавливает одного брокера в качестве лидера для каждого раздела каждой темы. Лидер отвечает за обработку как чтения, так и записи в этот раздел. Вы не можете принять решение читать или писать у не-лидера-брокера.

Итак, что означает предоставление брокера или списка брокеров кафка-консоли-продюсера? Ну, брокер или брокеры, которые вы предоставляете в командной строке, - это всего лишь первая контактная точка для вашего продюсера. Если брокер, которого вы перечислите, не является лидером для раздела/раздела, который вам нужен, ваш продюсер получит текущую информацию о лидере (называемую "метаданные темы" в kafka-talk) и при необходимости повторно подключитесь к другим брокерам, прежде чем отправлять записи. Фактически, если ваша тема имеет несколько разделов, она может даже подключаться к нескольким брокерам параллельно (если лидеры разделов являются разными брокерами).

Второй вопрос: почему потребителю требуется список zookeeper для соединений вместо списка брокеров? Ответ на этот вопрос заключается в том, что потребители kafka могут работать в "группах", а zookeeper используется для координации этих групп (как работают группы - более крупная проблема, выходящая за рамки этого Q). Zookeeper также хранит списки брокеров по темам, поэтому потребитель может вытащить брокерские списки непосредственно из zookeeper, что делает дополнительный список -broker немного избыточным.

Ответ 3

API-интерфейс Kafka Producer напрямую не взаимодействует с Zookeeper. Тем не менее, пользовательский API высокого уровня подключается к Zookeeper для извлечения/обновления информации о смещении раздела для каждого пользователя. Таким образом, потребительский API завершится с ошибкой, если он не сможет подключиться к Zookeeper.

Ответ 4

Все приведенные выше ответы верны в более старых версиях Kafka, но все изменилось с прибытием Kafka 0.9.

Теперь больше нет прямого взаимодействия с zookeeper от производителя или потребителя. Еще одна интересная вещь - 0,9, Kafka устранил несходство между API высокого уровня и низкоуровневого уровня, так как оба пользователя соответствуют унифицированному потребительскому API.