如何从Java中获取kafka服务器的主题列表

Ana*_*and 17 java apache-kafka

我正在使用kafka 0.8版本,非常新的.

我想知道创建的主题列表及其kafka server元数据.是否有任何API可以找到这个?

基本上,我需要编写一个应该自动发现任何主题的Java使用者kafka server.这里有要获取的API TopicMetadata,但是这需要主题名称作为输入参数.我需要服务器中存在的所有主题的信息.

bet*_*y00 27

与Kafka 0.9.0

您可以使用提供的使用者方法listTopics()列出服务器中的主题;

例如.

Map<String, List<PartitionInfo> > topics;

Properties props = new Properties();
props.put("bootstrap.servers", "1.2.3.4:9092");
props.put("group.id", "test-consumer-group");
props.put("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
props.put("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");

KafkaConsumer<String, String> consumer = new KafkaConsumer<String, String>(props);
topics = consumer.listTopics();
consumer.close();
Run Code Online (Sandbox Code Playgroud)


小智 5

我认为这是最好的方法:

ZkClient zkClient = new ZkClient("zkHost:zkPort");
List<String> topics = JavaConversions.asJavaList(ZkUtils.getAllTopics(zkClient));
Run Code Online (Sandbox Code Playgroud)


Dav*_*ley 3

Kafka 附带的示例 shell 脚本是一个不错的起点。在发行版的 /bin 目录中,有一些您可以使用的 shell 脚本,其中之一是 ./kafka-topic-list.sh 如果您在不指定主题的情况下运行该脚本,它将返回所有主题及其元数据。请参阅: https ://github.com/apache/kafka/blob/0.8/bin/kafka-list-topic.sh

该 shell 脚本依次运行: https://github.com/apache/kafka/blob/0.8/core/src/main/scala/kafka/admin/ListTopicCommand.scala

以上都是对 0.8 Kafka 版本的引用,因此如果您使用不同的版本(即使是一点差异),请务必使用 github 上相应的分支/标签