J'écris un script Shell pour surveiller kafka courtiers.
J'ai parcouru des liens et constaté que si ZooKeeper contient une liste de courtiers et que, dans cette liste, l'adresse IP est présente, un courtier kafka est en cours d'exécution.
Je souhaite une commande utilisable dans mon script Shell pour obtenir la liste des courtiers et vérifier si kafka est en cours d'exécution.
Existe-t-il une commande curl
pour obtenir le statut de la grappe kafka comme elasticsearch?
Cette commande vous donnera la liste des courtiers actifs entre parenthèses:
./bin/zookeeper-Shell.sh localhost:2181 ls /brokers/ids
Autre moyen en utilisant Zk-Client:
Si vous préférez ne pas passer d'arguments à ./zookeeper-Shell.sh
et que vous souhaitez voir les détails du courtier à partir de la CLI de Zookeeper, vous devez installer le logiciel autonome Zookeeper (comme d'habitude, Kafka ne fournit pas Jline JAR).
Une fois que vous avez installé (décompressez) le Zookeeper autonome, puis:
Exécutez le CLI Zookeeper:$ zookeeper/bin/zkCli.sh -server localhost:2181
#Make sure your Broker is already running
Si cela réussit, vous pouvez voir le client Zk s'exécuter en tant que:
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
(remplacez localhost par l'hôte sur lequel zookeeper est en cours d'exécution)
Voici quelques fonctions rapides que j'utilise lors de l'écriture de scripts bash Kafka Chargement de données dans des environnements de démonstration. Dans cet exemple, j'utilise le HDP sans sécurité, mais il est facilement modifiable pour d'autres environnements et se veut rapide et fonctionnel plutôt que particulièrement robuste.
Le premier récupère l'adresse du premier nœud ZooKeeper de la configuration:
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"
La seconde récupère les identifiants de courtier de 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"
Le troisième analyse à nouveau ZooKeeper pour récupérer la liste de Kafka Brokers Host: port prêt à être utilisé dans le client en ligne de commande:
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"
Pour utiliser les commandes zookeeper avec un script shell, essayez
zookeeper/bin/zkCli.sh -server localhost: 2181 <<< "ls/brokers/ids" | tail -n 1. La dernière ligne a généralement les détails de la réponse
Je l'ai fait comme ça
#!/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
Sur MacOS, vous pouvez essayer:
brew tap let-us-go/zkcli
brew install zkcli
zkcli ls /brokers/ids
zkcli get /brokers/ids/1