繁体   English   中英

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

[英]How to get All Topics in apache kafka?

    @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理解kafka。 我想获取与 zookeeper 相关的主题。 所以我正在尝试以下事情
a:) 首先我制作了zookeeper客户端,如下所示:

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

但是在使用 Java 代码执行时,主题是空白的。我不明白这里有什么问题。 我的 Zookeeper 道具如下: String zkConnect = "127.0.0.1:2181"; 并且动物园管理员运行得非常好。
请帮助伙计们。

这很简单。 (我的示例是用 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 树的结构时,这将很有帮助。 (这里看起来很小。请在新选项卡中打开图像并放大。)

动物园管理员树

您可以使用 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());

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

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

您可以找到以下代码示例

  • 创建新主题
  • 删除主题
  • 描述主题:给出Leader、Partitions、ISR和Replicas
  • 列出主题
  • 获取控制器代理/节点详细信息
  • 集群中的所有代理/节点详细信息

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM