web-dev-qa-db-fra.com

Comment répertorier tous les Kafka courtiers disponibles dans un cluster?

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?

45

Cette commande vous donnera la liste des courtiers actifs entre parenthèses:

./bin/zookeeper-Shell.sh localhost:2181 ls /brokers/ids
75
jimijazz

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]
  • À partir de là, vous pouvez explorer les détails du courtier en utilisant diverses commandes:

$ 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'

47
Panchu
echo dump | nc localhost 2181 | grep brokers

(remplacez localhost par l'hôte sur lequel zookeeper est en cours d'exécution)

18
Aydin K.

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"
6
Chaffelson

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

1
Gangadhar

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
0
Olivier Refalo

Sur MacOS, vous pouvez essayer:

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

zkcli ls /brokers/ids
zkcli get /brokers/ids/1
0
Jose Alban