108 votes

Comment lister tous les brokers Kafka disponibles dans un cluster ?

Je suis en train d'écrire un shell script pour surveiller les brokers kafka.

J'ai parcouru quelques liens et j'ai trouvé que si ZooKeeper contient une liste de brokers, et si, dans cette liste, l'adresse IP est présente, alors un broker kafka est en cours d'exécution.

Je veux une commande que je peux utiliser dans mon shell script pour obtenir la liste des courtiers et vérifier si kafka est en cours d'exécution.

Existe-t-il des curl pour obtenir l'état du cluster kafka comme pour elasticsearch ?

1 votes

Je sais qu'à l'intérieur du zookeper-shell script dans le dossier bin de Kafka, vous pouvez appeler ls /brokers/ids pour obtenir les identifiants des courtiers actuellement en activité. Je ne sais pas comment passer cela en paramètre au script cependant...

166voto

jimijazz Points 944

Cette commande vous donnera la liste des courtiers actifs entre crochets :

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

6 votes

Merci Monsieur pour votre réponse. J'obtiens l'erreur suivante lorsque j'exécute la commande Connecting to xx.xx.xx.xxx:2181 Welcome to ZooKeeper! JLine support is disabled WATCHER:: WatchedEvent state:SyncConnected type:None path:null [0, 1, 3]

3 votes

@ShivkumarMallesappa, cela signifie que les courtiers vivants sont ceux qui ont un identifiant 0, 1 et 3.

1 votes

Je ne sais pas s'il est possible d'obtenir l'adresse IP des courtiers, sinon comment puis-je vérifier quel courtier est en vie et lequel ne l'est pas. Je vous remercie.

83voto

Panchu Points 531

Autre façon d'utiliser Zk-Client :

Si vous ne préférez pas passer d'arguments à ./zookeeper-shell.sh et que vous voulez voir les détails du broker à partir du CLI de Zookeeper, vous devez installer Zookeeper de manière autonome (car Kafka traditionnel n'est pas fourni avec le JAR de Jline).

Une fois que vous avez installé (décompressé) le Zookeeper autonome, alors.. :

  • Exécutez l'interface de programmation de Zookeeper :
    $ zookeeper/bin/zkCli.sh -server localhost:2181 #Make sure your Broker is already running

  • Si l'opération est réussie, le client Zk s'exécute sous la forme suivante :

WATCHER::

WatchedEvent state:SyncConnected type:None path:null
[zk: localhost:2181(CONNECTED) 0]
  • À partir de là, vous pouvez explorer les détails du courtier à l'aide de différentes 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'

0 votes

Comment lancer ces commandes (ls /brokers/ids) à l'aide d'un script bash ?

1 votes

Lorsque vous lancez Zookeeper CLI, vous obtenez une invite. Vous avez exécuté ces commandes à cette invite.

1 votes

Le texte est le suivant Node doesn't exist .

31voto

AydinK Points 181
echo dump | nc localhost 2181 | grep brokers

(remplacez localhost par l'hôte sur lequel zookeeper tourne)

2 votes

Cela ne me donne pas toujours la liste des courtiers, parfois la liste est vide. Je ne sais pas exactement pourquoi, cela semble se produire parce que la sortie nc n'est pas synchrone.

0 votes

Cette méthode est pratique car elle permet de diriger facilement la sortie dans le fichier wc -l commande

1 votes

A @dhalfageme : La raison pour laquelle ce n'est pas cohérent pour vous est que nc a démissionné juste une nanoseconde avant que les données de réponse ne reviennent. Pour que cela soit cohérent, il faut demander à nc d'attendre au moins 1 seconde avant de quitter : nc -q 1 localhost 2181

10voto

Chaffelson Points 651

Voici quelques fonctions rapides que j'utilise lorsque j'écris des scripts bash pour charger des données Kafka dans des environnements de démonstration. Dans cet exemple, j'utilise HDP sans sécurité, mais il est facilement modifiable pour d'autres environnements et est destiné à être rapide et fonctionnel plutôt que particulièrement robuste.

La première récupère l'adresse du premier noeud ZooKeeper dans 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"

Le second récupère les identifiants des courtiers auprès 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 des courtiers Kafka Host:port prêts à être utilisés 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"

2voto

Gangadhar Points 18

Pour utiliser les commandes de zookeeper avec le shell script essayez

zookeeper/bin/zkCli.sh -server localhost:2181 << "ls /brokers/ids" | tail -n 1. La dernière ligne contient généralement les détails de la réponse

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X