Зачем кластеру Kafka нужен контроллер, когда он уже использует Zookeeper? - PullRequest
1 голос
/ 07 ноября 2019

Кластер Kafka имеет узел контроллера и кластер Zookeeper, оба со своим собственным набором обязанностей. Каковы требования к контроллеру, когда у нас уже есть zookeeper? Например: zookeeper выполняет выбор контроллера, а выбор лидера раздела - контроллером. Почему Kafka не использует Zookeeper также для выбора лидера раздела, когда у него уже есть информация о том, какие разделы на каких узлах и какие узлы действительно активны .

Короче говоря, я изо всех силпонять требование диспетчера, несмотря на присутствие зоопарка. Было бы очень полезно, если бы кто-то мог объяснить причину этого выбора дизайна и преимущества.

Ответы [ 2 ]

0 голосов
/ 07 ноября 2019

kafka использует zookeeper для нескольких вещей:

  1. членство в кластере - живые брокеры кластера - это те, у кого эфемерные узлы ZK
  2. выборы лидера - выборы брокера kafkaкоторый действует как контроллер
  3. хранилища состояний - некоторое (в основном старшее) состояние хранится в ZK - например, конфигурация для тем. некоторое состояние, которое раньше было в ZK, было перенесено в специальные темы (смещения потребителей), а некоторые новые функции были написаны для сохранения состояния полностью в kafka (журналы транзакций, например).

общая тенденцияпрекратить использование состояния в ZK и вместо этого самостоятельно разместить его (хотя старые части кода никогда не переносились).

почему бы не использовать ZK для выбора лидера раздела - одна из причин заключается в логикеучаствует. при выборе брокера-лидера кластера нет никаких предпочтений - подойдет любой брокер. это хорошо согласуется с тем, как работает выбор лидера на основе ZK (1-й член, создающий и владеющий эфемерными победами znode).

при выборе лидера раздела, однако вам нужно немного больше логики. например, вы хотите выбрать лидера с «самым высоким водяным знаком» (с самыми последними данными, помните, что репликация обычно асинхронная). есть также логика вокруг выборов нечистого лидера. Один ZK не может этого сделать, поэтому это делает контроллер.

0 голосов
/ 07 ноября 2019

Zookeeper работает в качестве координационной службы, и Kafka использует zookeeper для той же цели.

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

Kafka хранит минимальную информацию в Zookeeper.

https://cwiki.apache.org/confluence/display/KAFKA/KIP-500%3A+Replace+ZooKeeper+with+a+Self-Managed+Metadata+Quorum

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