命令从zookeeper获取kafka经纪人列表

时间:2016-10-20 06:26:21

标签: apache-kafka

我正在编写一个shell脚本来监控kafka经纪人。 我已经浏览了一些链接,发现如果ZooKeeper包含一个代理列表,并且如果在此列表中存在IP地址,那么kafka代理正在运行。

我想要一个可以在我的shell脚本中使用的命令来获取代理列表并检查kafka是否正在运行。

是否有curl命令来获取像elasticsearch一样的kafka群集状态?

9 个答案:

答案 0 :(得分:66)

此命令将为您提供括号内的活动代理列表:

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

答案 1 :(得分:44)

使用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'

答案 2 :(得分:12)

echo dump | nc localhost 2181 | grep brokers

答案 3 :(得分:5)

当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中检索经纪人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"

第三次再次解析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"

答案 4 :(得分:2)

如果您使用的是Kafka的新版本,例如5.3.3,您可以使用

kafka-broker-api-versions  --bootstrap-server BROKER | grep 9092

您只需要通过其中一位经纪人

答案 5 :(得分:1)

要使用带有shell脚本的zookeeper命令,请尝试

zookeeper / bin / zkCli.sh -server localhost:2181&lt;&lt;&lt; “ls / brokers / ids”| tail -n 1.最后一行通常有响应细节

答案 6 :(得分:0)

我是这样做的

#!/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

答案 7 :(得分:0)

在MacOS上,可以尝试:

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

zkcli ls /brokers/ids
zkcli get /brokers/ids/1

答案 8 :(得分:0)

使用Confluent's REST Proxy API v3:

curl -X GET -H "Accept: application/vnd.api+json" localhost:8082/v3/clusters

其中localhost:8082是Kafka代理地址。