华为云kafka,获取所有能读取的主题
时间: 2023-08-18 14:13:20 浏览: 52
要获取所有能读取的主题,可以使用 Kafka 的 AdminClient API。以下是一个示例代码片段:
```
Properties props = new Properties();
props.put(AdminClientConfig.BOOTSTRAP_SERVERS_CONFIG, "kafka-broker1:9092,kafka-broker2:9092");
AdminClient adminClient = AdminClient.create(props);
ListTopicsOptions options = new ListTopicsOptions();
options.listInternal(true); // 包括内部主题
ListTopicsResult topicsResult = adminClient.listTopics(options);
Set<String> topics = topicsResult.names().get();
for (String topic : topics) {
DescribeTopicsResult describeResult = adminClient.describeTopics(Collections.singletonList(topic));
TopicDescription topicDesc = describeResult.values().get(topic).get();
if (!topicDesc.isInternal()) {
if (topicDesc.partitions().stream().allMatch(p -> p.replicas().size() > 0)) {
System.out.println(topic);
}
}
}
```
在这个示例中,我们首先创建了一个 AdminClient 实例。然后我们使用 `listTopics()` 方法获取所有主题的名称。注意,我们将 `listInternal` 参数设置为 `true`,以便包括内部主题。接下来,我们对每个主题进行描述,并检查它是否具有至少一个副本。如果是,则说明我们可以读取该主题,因此我们将其打印出来。
请注意,要运行此代码,您需要替换 `bootstrap.servers` 属性中的 Kafka broker 地址。