2016-06-14 3 views
6

У нас есть кластер Kafka/Zookeeper, состоящий из 3 брокеров. У нас есть один продюсер, который отправляет сообщения на одну конкретную тему Кафки и несколько групп потребителей, читающих эту тему. Эти потребители проводят выборы лидеров через Zookeeper для себя (независимо от Kafka).Что происходит, если Zookeeper полностью не работает?

Версии используются:

  • Кафка: 0.9.0.1
  • Zookeeper: 3.4.6 (входит в состав Кафки-Package)

Все процессы управляются Supervisor. Пока все работает нормально. То, что мы пробовали сейчас (для целей тестирования), состояло в том, чтобы просто убить все процессы Zookeeper и посмотреть, что произойдет.

Как и ожидалось, наши потребительские процессы больше не могли подключаться к Zookeeper. Но неожиданно, Kafka Brokers все еще работали. Наш продюсер вообще не жаловался и все еще мог писать в эту тему. Хотя я не мог использовать kafka/bin/kafka-topics.sh или что-то подобное, поскольку все они требуют параметра zookeeper, я все же мог видеть, что фактический размер журнала темпов растет. После перезапуска процессов zookeeper все снова работало так же, как и раньше.

Что мы не могли понять сейчас ... что на самом деле произошло? Мы думали, что Kafka потребует рабочего Zookeeper-Connection, и мы не смогли найти объяснения этого поведения в Интернете.

+0

Zookeeper не требуется для всех операций, выполняемых Kafka. Например, потребительские клиенты Kakfa совершают свои смещения в ZK. Как я знаю. ZK также используется, если брокер не может выбрать новых лидеров для раздела неудавшегося брокерского хостинга. Однако, пока все брокеры работают, письмо не проблема: см. Https://kafka.apache.org/090/documentation.html#replication и http://www.confluent.io/blog/hands- free-kafka-replication-a-lesson-in-operating-simplicity/для простых деталей. –

+1

> Потребительские клиенты Kakfa совершают свои смещения в ZK. Они? Насколько я понял, «новому потребителю» это не нужно, поскольку они хотели отделить потребителей от Zookeeper. Вот почему вы используете свойство bootstrap.servers вместо zookeeper.connect и используете Kafka-Ports – tehK

+1

Да. Старый потребитель фиксирует смещение в ZK. Новые потребители фиксируют свои смещения в теме Kafka и не зависят от ZK. –

ответ

0

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

в случае отказа 3node zk один узел, поскольку кворум по-прежнему остается удовлетворены ... но не могут получить 2node сбои, которые приведут к вышеуказанным последствиям ...