如何列出集群中所有可用的Kafka经纪人?


74

我正在编写一个shell脚本来监视kafka经纪人。

我浏览了一些链接,发现如果ZooKeeper包含代理列表,并且在此列表中存在IP地址,则说明kafka代理正在运行。

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

是否有任何curl命令可以获取kafka集群状态(例如elasticsearch)?


1
我知道在Kafka的bin文件夹中的zookeper-shell脚本中,您可以调用ls /brokers/ids以获取当前存在的代理的ID。我不知道如何将其作为参数传递给脚本……
jimijazz

Answers:


119

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

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

3
谢谢您,先生。运行命令时,出现以下错误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]
Shivkumar Mallesappa,2016年

3
@ShivkumarMallesappa,这意味着您还活着的经纪人是ID为0、1和3的
经纪人。– jimijazz

1
先生,是否有可能获得经纪人的ips信息,否则我将如何检查哪个经纪人还活着,哪个经纪人还没有。谢谢你
Shivkumar Mallesappa '16

我不确定,但是当您启动代理时,您会使用一个配置文件,在其中配置ID ...也许您可以在那时建立一个查找表,以从代理ID获取IP?
jimijazz

我在这个问题的下方添加了一个答案,以帮助您@ShivkumarMallesappa
Chaffelson

62

使用Zk-Client的替代方法:

如果您不希望将参数传递给./zookeeper-shell.shZookeeper CLI,并且不想从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'


如何使用bash脚本触发这些命令(ls / brokers / ids)?
Shivkumar Mallesappa '17

1
运行Zookeeper CLI时,会出现提示。您已经在该提示符下运行了这些命令。
daemon12 '18

25
echo dump | nc localhost 2181 | grep brokers

(将localhost替换为运行zookeeper的主机)


1
这并不总是列出我的经纪人,有时列表是空的。我不知道为什么会这样,这似乎是因为nc输出不同步
dhalfageme,

这种方式很方便,因为您可以轻松地通过wc -l命令
传递

8

这是将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检索Broker 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"


2

要将Zookeeper命令与Shell脚本一起使用,请尝试

zookeeper / bin / zkCli.sh -server localhost:2181 <<<“ ls / brokers / ids” | tail -n 1.最后一行通常包含响应详细信息


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


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.