【问题标题】:How to list all available Kafka brokers in a cluster?如何列出集群中所有可用的 Kafka 代理?
【发布时间】:2017-03-02 00:15:05
【问题描述】:

我正在编写一个 shell 脚本来监控 kafka 代理。

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

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

有没有curl命令可以像elasticsearch一样获取kafka集群状态?

【问题讨论】:

  • 我知道在 Kafka 的 bin 文件夹中的 zookeper-shell 脚本中,您可以调用 ls /brokers/ids 来获取当前活跃的经纪人的 ID。我不知道如何将它作为参数传递给脚本...

标签: apache-kafka


【解决方案1】:

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

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

【讨论】:

  • 谢谢先生的回复。运行命令 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] 时出现以下错误
  • @ShivkumarMallesappa,这意味着你还活着的经纪人是 id 0、1 和 3 的经纪人。
  • 先生,是否有可能获得经纪人的 ips,否则我如何才能检查哪个经纪人活着,哪个经纪人没有。谢谢
  • 我不确定,但是当你启动代理时,你使用一个配置文件,你在其中分配 id...也许你可以在那时建立一个查找表来获取来自 broker id 的 ip?
  • 我在这个问题的下方添加了一个答案来帮助你解决@ShivkumarMallesappa
【解决方案2】:

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

【讨论】:

  • 如何使用 bash 脚本触发这些命令(ls /brokers/ids)?
  • 当你运行 Zookeeper CLI 时,你会得到一个提示。您已经在该提示符下运行了这些命令。
  • 上面写着Node doesn't exist
【解决方案3】:
echo dump | nc localhost 2181 | grep brokers

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

【讨论】:

  • 这并不总是列出我的经纪人,有时列表是空的。不知道具体是什么原因,好像是因为nc输出不同步
  • 这种方式很方便,因为您可以轻松地在wc -l 命令中通过管道输出
  • 致@dhalfageme:这对您来说不一致的原因是nc 在回复数据返回前一纳秒就退出了。使其保持一致的方法是要求nc 在退出前等待至少 1 秒:nc -q 1 localhost 2181
【解决方案4】:

以下是我在将 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"

第二个从 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"

【讨论】:

    【解决方案5】:

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

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

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

    【讨论】:

    • 如果可用,它是 IMO 最干净的选项
    • 'grep' 不是内部或外部命令、可运行程序或批处理文件。
    【解决方案6】:

    在 MacOS 上,可以试试:

    brew tap let-us-go/zkcli
    brew install zkcli
    
    zkcli ls /brokers/ids
    zkcli get /brokers/ids/1
    

    【讨论】:

    • 这很有帮助
    【解决方案7】:

    通过 shell 脚本尝试使用 zookeeper 命令

    zookeeper/bin/zkCli.sh -server localhost:2181

    【讨论】:

      【解决方案8】:

      使用Confluent's REST Proxy API v3:

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

      localhost:8082 是 Kafka 代理地址。

      【讨论】:

        【解决方案9】:

        我是这样做的

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

        【讨论】:

          猜你喜欢
          • 2020-08-19
          • 2022-11-21
          • 2020-06-04
          • 2018-12-21
          • 2020-05-08
          • 2020-12-09
          • 1970-01-01
          • 2021-01-01
          • 2023-04-03
          相关资源
          最近更新 更多