获取Kafka AdminClient.describeLogDirs调用的经纪人列表

时间:2019-07-15 15:03:15

标签: java apache-kafka

AdminClient的API包含方法describeLogDirs,在两个签名中都需要“代理列表”。引号中的表达式正是javadoc讲述的内容-不再更多。

我必须为此函数提供什么参数?我的第一个猜想是一个从0或1开始到复制因子的序列,但是后来我在应用程序的日志中看到以下(不相关的)行,向我表明我可能必须期望像1001这样的东西。

13:47:11.931 [main] DEBUG o.a.k.c.consumer.internals.Fetcher - [Consumer clientId=myInstance-1725351556, groupId=] Sending READ_UNCOMMITTED IncrementalFetchRequest(toSend=(), toForget=(), implied=(myexample-0)) to broker example.com:9092 (id: 1001 rack: null)

我通过对1001进行一次硬编码来验证了这一点:

List<Integer> brokers = Collections.singletonList(1001);
DescribeLogDirsResult result = adminClient.describeLogDirs(brokers);

现在:如何用我的kafka客户端的实时值填充变量brokers? (我的代码中有ProduceradminClient实例)?我找不到此呼叫的任何示例代码。

更新(解决方案):这是我现在使用的最终代码行:

List<Integer> brokers = adminClient.describeCluster().nodes().get().stream().map(Node::id).collect(Collectors.toList());

1 个答案:

答案 0 :(得分:0)

您可以使用describeCluster()来获取特定于节点的详细信息,例如主机,端口和ID。

  

public abstract DescribeClusterResult describeCluster​(DescribeClusterOptions options)

     

获取有关的信息   集群中的节点。

     

参数:options-要使用的选项   获取有关群集的信息时。

     

返回:   DescribeClusterResult

示例:

Properties props = new Properties();
props.put("bootstrap.servers", "localhost:9092,localhost:9093");

AdminClient adminClient = AdminClient.create(props);
DescribeClusterResult describeClusterResult = adminClient.describeCluster();
Collection<Node> clusterDetails = describeClusterResult.nodes().get();