конфигурация kafka и описание zookeeper (kafka, zookeeper, akhq, контроллер quorum )

Здравствуйте, это codeshow .
На этот раз мы будем практиковать kafka .

Для практики clone repository devcontainers codeshow github .
Запустите vscode из папки kafka .
Запустите devcontainers .
Дождитесь, пока container запустится.
Когда container закончит работу, мы откроем desktop docker .
3 kafka и смотритель зоопарка AKHQ работают.

Опишите эти контейнеры:
Смотритель зоопарка является coordinator system distribution .
Управляйте несколькими серверами kafka в распределенной среде.

AKHQ предоставляет web UI для удобного управления kafka .
Он использует port 8080.

zookeeper периодически отправляет сигнал сердцебиения всем узлам kafka . zookeeper отправляет ping запрос, Kafka отправляет pong ответ. Если какой-либо узел kafka не отвечает, zookeeper считает этот узел kafka неисправным.

Если kafka номер 3 не сработает,
ping и pong неудачу,
zookeeper удаляет kafka номер 3 с узла управления.
Затем оставшиеся kafka 1 и 2 уведомляются об отказе узла 3, и kafka 1 и 2 больше не взаимодействуют с 3.
Для справки: при воссоздании kafka3 он регистрируется в zookeeper, как показано на рисунке, и kafka 1, 2 и 3 снова становятся cluster.

Для справки, на практике есть только один zookeeper,
Как показано на рисунке, в production среде установлено несколько узлов zookeeper .
Настройте службу так, чтобы она работала даже в случае выхода из строя одного zookeeper .
В классе мы будем использовать только 1 zookeeper, потому что нам не нужна высокая доступность, как в производственной среде.

Давайте перейдем в меню Nodes , предоставленное AKHQ с помощью browser .
Всего на экране запущено 3 ноды kafka .

Остановите kafka2 на desktop docker .
Если вы вернетесь в меню узла AKHQ и обновитесь,
Вы можете видеть, что kafka2 исчез.
Снова нажмите кнопку start на desktop docker .
Подождите, пока kafka загрузится и обновит экран Nodes в AKHQ .
kafka2 снова будет отображаться на экране.
Среди этих узлов kafka мы остановим узел control .
Если control узел ранее не прошел check health , вы можете увидеть, что другой узел становится control узлом.

В kafka zookeeper отвечает за координацию между узлами в распределенной среде.
Поскольку параметр server admin zookeeper был установлен в значение true в настройках devcontainer,
Мы можем проверить информацию zookeeper через port 8081 через браузер.

В качестве адреса я наберу commands localhost slash 8081 в браузере.

На странице commands вы можете увидеть команды, предоставляемые zookeeper, в виде ссылок.
Выберите ссылку connections .

http://localhost:8081/commands/connections

С помощью данных json , полученных connections , вы можете проверить информацию об узле kafka , подключенном к zookeeper .

Давайте проверим, является ли этот IP узлом kafka , войдя в container docker .

hostname -I

Вы можете видеть, что информация о соединении zookeeper соответствует IP-адресу узла kafka .
Вы можете проверить информацию о соединении трех узлов kafka в массиве connections .
Теперь вы можете видеть, что в общей сложности 3 узла kafka периодически ping .
Как показано на предыдущем рисунке,
При сбое ping или pong zookeeper передает информацию об отказавшем узле другим узлам kafka .
Два оставшихся узла kafka больше не взаимодействуют с вышедшим из строя узлом.
И когда узел kafka оживет в zookeeper , и ping и pong преуспеют,
Эта информация снова распространяется на оставшиеся два узла, и эти узлы kafka связываются с новым узлом.

Кроме того, каждому узлу kafka по существу нужен один контроллер.
Этот узел контроллера является очень важным узлом, который управляет и контролирует другие узлы kafka .
При использовании zookeeper только один узел kafka может быть узлом-контроллером.
Если этот один узел контроллера выйдет из строя, все cluster kafka не смогут работать.
Поэтому, если узел контроллера выходит из строя, один из других узлов kafka должен быть выбран в качестве узла контроллера.
В это время узлы избираются путем голосования, и в этом процессе участвует zookeeper.
Поэтому zookeeper играет важную роль в распределенной системе kafka .
Для справки, остальные узлы, кроме узла контроллера, называются узлами broker . Узел, хранящий partition, о котором вы узнаете в следующем уроке, отвечает за узел broker . Узел контроллера управляет узлами broker и хранит различные метаданные для использования broker .

Для справки, kafka дополнительно предоставляет контроллер quorum , начиная с версии 2.8.0.
Он управляет метаданными kafka непосредственно на узле kafka без использования zookeeper по protocol KRaft без согласования kafka с zookeeper .
По сравнению с существующим zookeeper, который имеет только один узел контроллера,
Контроллер quorum может иметь несколько узлов контроллера.
То есть, если узел контроллера выходит из строя, можно немедленно использовать другой узел контроллера.
Узел контроллера всегда синхронизирует метаданные.
Существующая стоимость копирования метаданных из zookeeper снижена, поэтому узлы контроллера можно запускать очень быстро.
Прямо сейчас у вас есть два варианта: zookeeper и quorum .
В будущем kafka может отказаться от zookeeper.
Однако, поскольку в настоящее время он находится в процессе перехода, я думаю, что было бы хорошо изучить zookeeper и контроллер quorum по порядку.

Мы потренируемся просто запрашивать zookeeper с помощью команды shell .
Выполните shell container , в котором установлена kafka .

Запросить всю kafka через zookeeper .

zookeeper-shell zookeeper:2181 ls /brokers/ids

Я подтвердил, что всего в массиве три cluster 0, 1, 2.

Давайте посмотрим на информацию о 0-й kafka с помощью команды get .

zookeeper-shell zookeeper:2181 get /brokers/ids/0
zookeeper-shell zookeeper:2181 get /brokers/ids/1
zookeeper-shell zookeeper:2181 get /brokers/ids/2

Вы можете проверить информацию о broker kafka , хранящуюся в zookeeper .
Благодаря вышеизложенному мы научились хранить и координировать различную информацию kafka в распределенной среде с помощью zookeeper .

Выше мы рассмотрели настройки среды kafka и внутреннюю работу.
В следующий раз мы узнаем о topic и partition.

Настройки подписки и лайков очень полезны для создателей контента.

Спасибо