kafka 配置 + zookeeper cli + 获取 kafka 主机的正确信息

kafka configuration + zookeeper cli + get the right info for kafka host

众所周知,什么时候需要打印 kafka 代理 ID,我们可以使用以下 cli

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

此 cli 打印以下内容

WATCHER::
WatchedEvent state:SyncConnected type:None path:null
[1018, 1017, 1016]

这意味着我们有id为

的kafka
1018 
1017
1016

但是我们的kafka名字是

Kafka_confluent01
Kafka_confluent02
Kafka_confluent03

那么如何知道哪个 kafka broker id ( 1018 , 1017 , 1016 ) 属于真正的主机 ( Kafka_confluent01 / Kafka_confluent02 / Kafka_confluent03 )

您可以使用以下代码动态获取经纪人列表。

public class KafkaBrokerInfoFetcher {

    public static void main(String[] args) throws Exception {
        ZooKeeper zk = new ZooKeeper("localhost:2181", 10000, null);
        List<String> ids = zk.getChildren("/brokers/ids", false);
        for (String id : ids) {
            String brokerInfo = new String(zk.getData("/brokers/ids/" + id, false, null));
            System.out.println(id + ": " + brokerInfo);
        }
    }
}

在运行代码后,您将获得经纪人ID和相应的主机。

1: {"jmx_port":-1,"timestamp":"1428512949385","host":"192.168.0.11","version":1,"port":9093}
2: {"jmx_port":-1,"timestamp":"1428512955512","host":"192.168.0.11","version":1,"port":9094}
3: {"jmx_port":-1,"timestamp":"1428512961043","host":"192.168.0.11","version":1,"port":9095}

您可以将 kafkacat-L 运算符一起使用:

$ kafkacat -b kafka-01.foo.bar:9092 -L
Metadata for all topics (from broker 1: kafka-01.foo.bar:9092/1):
 3 brokers:
  broker 2 at kafka-02.foo.bar:9092
  broker 3 at kafka-03.foo.bar:9092
  broker 1 at kafka-01.foo.bar:9092 (controller)