如何在apache kafka中获取所有主题?

时间:2015-04-24 12:42:33

标签: java apache-kafka apache-zookeeper

    @RequestMapping(value = "/getTopics",method = RequestMethod.GET)
    @ResponseBody
    public Response getAllTopics() {
        ZkClient zkClient = new ZkClient(ZookeeperProps.zookeeperURL, ZookeeperProps.connectionTimeoutMs,
                ZookeeperProps.sessionTimeoutMs, ZKStringSerializer$.MODULE$);
        Seq<String> topics = ZkUtils.getAllTopics(zkClient);
        scala.collection.Iterator<String> topicIterator = topics.iterator();
        String allTopics = "";
        while(topicIterator.hasNext()) {
            allTopics+=topicIterator.next();
            allTopics+="\n";
        }

        Response response = new Response();
        response.setResponseMessage(allTopics);
        return response;

    }

我是apache kafka的新手。 现在有一天试图用zookeeper了解卡夫卡。 我想获取与zookeeper相关的主题。所以我正在尝试遵循的事情 a :)首先我创建了zookeeper客户端,如下所示:

ZkClient(ZookeeperProps.zookeeperURL, ZookeeperProps.connectionTimeoutMs, ZookeeperProps.sessionTimeoutMs, ZKStringSerializer$.MODULE$);
Seq<String> topics = ZkUtils.getAllTopics(zkClient);

但是在使用Java代码执行时主题是空白的。我没有得到这里的问题。 我的Zookeeper道具如下:String zkConnect =&#34; 127.0.0.1:2181&#34 ;; 动物园管理员跑得很好 请帮帮我们。

4 个答案:

答案 0 :(得分:7)

这很简单。 (我的例子是用Java编写的,但在Scala中几乎是一样的。)

import java.util.List;

import org.apache.zookeeper.ZooKeeper;

public class KafkaTopicListFetcher {

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

我有三个主题的结果:test,test2和test 3

test
test2
test3

下面的图片是我为自己的博客发布的内容。当您了解Kafka使用的ZooKeeper树的结构时,它会很有帮助。 (这里看起来很小。请在新标签中打开图片并放大。)

ZooKeeper tree

答案 1 :(得分:3)

您可以使用kafka AdminClient 。下面的代码段可能会帮助您:

Properties properties = new Properties();
properties.put(AdminClientConfig.BOOTSTRAP_SERVERS_CONFIG, "localhost:9092");

AdminClient adminClient = AdminClient.create(properties);

ListTopicsOptions listTopicsOptions = new ListTopicsOptions();
listTopicsOptions.listInternal(true);

System.out.println(adminClient.listTopics(listTopicsOptions).names().get());

答案 2 :(得分:0)

我更喜欢使用kafka-topics.sh这是Kafka的内置shell脚本来获取主题。

答案 3 :(得分:0)

Kafka 客户端库具有 AdminClient API:支持管理和检查主题、代理、配置、ACL。

您可以找到

的代码示例
  • 创建新主题
  • 删除主题
  • 描述主题:给出领导者、分区、ISR 和副本
  • 列出主题
  • 获取控制器代理/节点详细信息
  • 集群中的所有代理/节点详细信息

https://medium.com/nerd-for-tech/how-client-application-interact-with-kafka-cluster-made-easy-with-java-apis-58f29229d992