gpt4 book ai didi

java - 如何获取 Kafka 中代理的连接字符串

转载 作者:行者123 更新时间:2023-11-30 06:52:09 25 4
gpt4 key购买 nike

我是卡夫卡新手。尝试实现消费者和生产者类来发送和接收消息。需要为这两个类配置 bootstrap.servers,这是由 , 分隔的代理 IP 和端口的列表。例如,

producerConfig.put("bootstrap.servers", 
"172.16.20.207:9946,172.16.20.234:9125,172.16.20.36:9636");

由于应用程序将在集群的主节点上运行,因此它应该能够从 ZooKeeper 检索代理信息,就像 Kafka: Get broker host from ZooKeeper 的答案一样。 .

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);
}
}

但是这个brokerInfo是Json格式的,如下所示: {“jmx_port”:-1,“时间戳”:“1428512949385”,“主机”:“192.168.0.11”,“版本”:1,“端口”:9093}

在同一篇文章中,另一位建议了以下方法来获取每个代理的连接字符串并用逗号将它们连接在一起。

for (String id : ids) {
String brokerInfoString = new String(zk.getData("/brokers/ids/" + id, false, null));
Broker broker = Broker.createBroker(Integer.valueOf(id), brokerInfoString);
if (broker != null) {
brokerList.add(broker.connectionString());
}
}

如果此 Broker 类来自 org.apache.kafka.common.requests.UpdateMetadataRequest.Broker,则它没有方法 createBrokerconnectionString

发现另一个类似的帖子Getting the list of Brokers Dynamically 。但它没有说明如何从代理信息(例如hostport)中获取属性。我可能可以为 json 之类的字符串编写一个解析器来提取它们,但我怀疑有更多的 Kafka native 方法可以做到这一点。有什么建议吗?

编辑:我意识到Broker类来自kafka.cluster.Broker。它仍然没有方法 connectionstring()

最佳答案

您可以使用ZkUtils检索集群中的所有broker信息,如下所示:

ZkUtils zk = ZkUtils.apply("zkHost:2181", 6000, 6000, true);
List<Broker> brokers = JavaConversions.seqAsJavaList(zk.getAllBrokersInCluster());
for (Broker broker : brokers) {
//assuming you do not enable security
System.out.println(broker.getBrokerEndPoint(SecurityProtocol.PLAINTEXT).host());
}
zk.close();

关于java - 如何获取 Kafka 中代理的连接字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42541107/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com