Почему нет узлов в / controller znode, когда работает кластер Kafka? - PullRequest
0 голосов
/ 16 ноября 2018

Вывод из клиента zookepeer:

[zk: s1:2181(CONNECTED) 1] ls /brokers/ids
[1, 2, 3]
[zk: s1:2181(CONNECTED) 1] ls /controller
[]

В кластере есть 3 брокера kafka, так почему я не могу найти контроллер и в / controller znode?

Другой вопрос: как я могу узнать, какие мастер-выборы используются на Кафке, на мастер-выборах в ZooKeeper или на Кафке?Является ли мастер выборов в Кафке, чтобы выбрать главного брокера Кафки?Так, каковы выборы лидера?Это избрать лидерский раздел?

1 Ответ

0 голосов
/ 16 ноября 2018

Вы задаете очень общие вопросы о том, как был разработан Кафка. Для этого нет лучшего места, чем официальная документация Кафки:

https://kafka.apache.org/documentation.html#impl_zookeeper

Официальное объяснение контроллера, из документов (мои основные моменты):

Также важно оптимизировать процесс выборов руководства, так как это критическое окно недоступности. Наивная реализация выборов лидера в конечном итоге будет проводить выборы на раздел для все разделы, размещенные узлом при сбое этого узла. Вместо этого мы выбираем один из брокеров в роли «контролера». Этот контроллер обнаруживает сбои на уровне брокера и несет ответственность за изменение лидер всех затронутых разделов в отказавшем брокере. Результат что мы можем объединить многие из необходимого руководства изменить уведомления, что делает процесс выборов намного дешевле и быстрее для большого количества разделов. Если контроллер выходит из строя, один из оставшихся в живых брокеров станет новым контролером.

https://kafka.apache.org/documentation.html#design_replicamanagment

Итак, контроллер - это брокер, который отвечает за мониторинг лидеров каждой из тем / разделов. Если одна или несколько тем / разделов лидера становятся недоступными, контроллер затем запускает выборы лидера и назначает нового лидера для каждой из этих тем / разделов, чтобы клиенты (как потребители, так и производители) могли использовать / производить там.

Причина, по которой вы ничего не видите под /controller, заключается в том, что вы предполагаете, что это «каталог», тогда как в действительности это узел информации. Вам нужно выполнить команду get /controller, чтобы увидеть результат. Вы должны увидеть что-то вроде этого:

[zk: s1:2181(CONNECTED) 1] get /controller
{"version":1,"brokerid":100,"timestamp":"1506197069724"}
cZxid = 0xf9
ctime = Sat Sep 23 22:04:29 CEST 2017
mZxid = 0xf9
mtime = Sat Sep 23 22:04:29 CEST 2017
pZxid = 0xf9
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x15eaa3a4fdd000d
dataLength = 56
numChildren = 0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...