kafkaブローカーを監視するシェルスクリプトを書いています。
いくつかのリンクを調べたところ、ZooKeeperにブローカーのリストが含まれており、このリストにIPアドレスが存在する場合、kafkaブローカーが実行されていることがわかりました。
シェルスクリプトで使用してブローカーリストを取得し、kafkaが実行されているかどうかを確認できるコマンドが必要です。
Elasticsearchのようなkafkaクラスターステータスを取得するcurl
コマンドはありますか?
このコマンドは、括弧内のアクティブなブローカーのリストを表示します:
./bin/zookeeper-Shell.sh localhost:2181 ls /brokers/ids
Zk-Clientを使用した代替方法:
引数を./zookeeper-Shell.sh
に渡したくない場合、Zookeeper CLIからブローカーの詳細を確認するには、スタンドアロンのZookeeperをインストールする必要があります(従来のKafkaはJline JARに対応していません)。
スタンドアロンのZookeeperをインストール(解凍)したら、次のようにします。
Zookeeper CLIを実行します。$ 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が実行されているホストに置き換えてください)
Kafkaデータロードデモ環境へのbashスクリプトを作成するときに使用するいくつかのクイック関数を次に示します。この例では、セキュリティなしで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"
2番目は、ZooKeeperからブローカーIDを取得します。
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"
3番目は、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