Ответ 1
Эта команда выдаст вам список активных брокеров в скобках:
./bin/zookeeper-shell.sh localhost:2181 ls /brokers/ids
Я пишу сценарий оболочки для мониторинга брокеров Кафки.
Я просмотрел некоторые ссылки и обнаружил, что если ZooKeeper содержит список брокеров, и если в этом списке присутствует IP-адрес, то работает брокер kafka.
Мне нужна команда, которую я могу использовать в своем сценарии оболочки, чтобы получить список брокеров и проверить, работает ли kafka.
Есть ли какая-нибудь команда curl
чтобы получить статус кластера kafka, напримерasticsearch?
Эта команда выдаст вам список активных брокеров в скобках:
./bin/zookeeper-shell.sh localhost:2181 ls /brokers/ids
Альтернативный способ использования 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'
echo dump | nc localhost 2181 | grep brokers
(замените localhost хостом, на котором работает zookeeper)
Вот несколько быстрых функций, которые я использую при написании сценариев 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"
Чтобы использовать команды zookeeper со сценарием оболочки, попробуйте
zookeeper/bin/zkCli.sh -server localhost: 2181 <<< "ls/brokers/ids" | tail -n 1. Последняя строка обычно содержит данные ответа
Я сделал это так
#!/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
На MacOS можно попробовать:
brew tap let-us-go/zkcli
brew install zkcli
zkcli ls /brokers/ids
zkcli get /brokers/ids/1