Как составить список всех доступных брокеров Kafka в кластере?

Я пишу сценарий оболочки для мониторинга брокеров Кафки.

Я просмотрел некоторые ссылки и обнаружил, что если ZooKeeper содержит список брокеров, и если в этом списке присутствует IP-адрес, то работает брокер kafka.

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

Есть ли какая-нибудь команда curl чтобы получить статус кластера kafka, напримерasticsearch?

Ответ 1

Эта команда выдаст вам список активных брокеров в скобках:

./bin/zookeeper-shell.sh localhost:2181 ls /brokers/ids

Ответ 2

Альтернативный способ использования Zk-Client:

Если вы не предпочитаете передавать аргументы в ./zookeeper-shell.sh и хотите просмотреть сведения о ./zookeeper-shell.sh из CLI Zookeeper, вам необходимо установить автономный Zookeeper (поскольку традиционная Kafka не подходит Jline JAR).

Как только вы установите (разархивируете) автономный Zookeeper, тогда:

  • Запустите CLI Zookeeper:
    $ zookeeper/bin/zkCli.sh -server localhost:2181 #Make sure your Broker is already running

  • Если это успешно, вы можете увидеть, что клиент Zk работает как:

WATCHER::

WatchedEvent state:SyncConnected type:None path:null
[zk: localhost:2181(CONNECTED) 0]
  • Отсюда вы можете изучить детали брокера, используя различные команды:

$ ls/brokers/ids # Gives the list of active brokers
$ ls/brokers/topics #Gives the list of topics
$ get/brokers/ids/0 #Gives more detailed information of the broker id '0'

Ответ 3

echo dump | nc localhost 2181 | grep brokers

(замените localhost хостом, на котором работает zookeeper)

Ответ 4

Вот несколько быстрых функций, которые я использую при написании сценариев bash. Загрузка данных Kafka в демонстрационные среды. В этом примере я использую HDP без защиты, но он легко модифицируется для других сред и предназначен для быстрой и функциональной, а не особо надежной работы.

Первый получает адрес первого узла ZooKeeper из конфигурации:

ZKS1=$(cat /usr/hdp/current/zookeeper-client/conf/zoo.cfg | grep server.1)
[[ ${ZKS1} =~ server.1=(.*?):[0-9]*:[0-9]* ]]
export ZKADDR=${BASH_REMATCH[1]}:2181
echo "using ZooKeeper Server $ZKADDR"

Второй получает идентификаторы брокера из ZooKeeper:

echo "Fetching list of Kafka Brokers"
export BROKERIDS=$(/usr/hdp/current/kafka-broker/bin/zookeeper-shell.sh ${ZKADDR} <<< 'ls /brokers/ids' | tail -1)
export BROKERIDS=${BROKERIDS//[!0-9 ]/}
echo "Found Kafka Broker IDS: $BROKERIDS"

Третий анализирует ZooKeeper снова, чтобы получить список Kafka Brokers Host: port, готовый для использования в клиенте командной строки:

unset BROKERS
for i in $BROKERIDS
do
DETAIL=$(/usr/hdp/current/kafka-broker/bin/zookeeper-shell.sh ${ZKADDR} <<< "get /brokers/ids/$i")
[[ $DETAIL =~ PLAINTEXT:\/\/(.*?)\"\] ]]
if [ -z ${BROKERS+x} ]; then BROKERS=${BASH_REMATCH[1]}; else 
BROKERS="${BROKERS},${BASH_REMATCH[1]}"; fi
done
echo "Found Brokerlist: $BROKERS"

Ответ 5

Чтобы использовать команды zookeeper со сценарием оболочки, попробуйте

zookeeper/bin/zkCli.sh -server localhost: 2181 <<< "ls/brokers/ids" | tail -n 1. Последняя строка обычно содержит данные ответа

Ответ 6

Я сделал это так

#!/bin/bash

ZK_HOST="localhost"
ZK_PORT=2181


for i in 'echo dump | nc $ZK_HOST $ZK_PORT | grep brokers'
do
    echo $i
    DETAIL='zkCli -server "$ZK_HOST:$ZK_PORT" get $i 2>/dev/null | tail -n 1'
    echo $DETAIL
done

Ответ 7

На MacOS можно попробовать:

brew tap let-us-go/zkcli
brew install zkcli

zkcli ls /brokers/ids
zkcli get /brokers/ids/1