在 Java 中以编程方式检查 Kafka 主题是否存在

mju*_*rez 5 java apache-kafka

使用 CLI 工具的情况下,以及在尝试生成主题之前,如何以编程方式知道主题是否已在 Kafka 集群中创建?

我遇到了一个主题不存在的问题,我们的应用程序试图生成一个不存在的主题,但它只在 90 秒(元数据超时)后收到通知。我想知道是否有办法从 Java 代码中知道该主题是否存在,以便我们可以在实际尝试发送消息之前进行检查。我想我可以查看 Kafka CLI utils 使用的代码,但我想知道是否有我可能错过的 API 或更简单的方法。

ame*_*tic 8

您可以使用AdminClient#listTopics()检查给定主题是否存在,如下所示:

Properties props = new Properties();
props.put(AdminClientConfig.BOOTSTRAP_SERVERS_CONFIG, "localhost:9092");
try (AdminClient client = AdminClient.create(props)) {
    ListTopicsOptions options = new ListTopicsOptions();
    options.listInternal(true); // includes internal topics such as __consumer_offsets
    ListTopicsResult topics = client.listTopics(options);
    Set<String> currentTopicList = topics.names().get();
    // do your filter logic here......
}
Run Code Online (Sandbox Code Playgroud)

  • 如果我们想检查单个主题是否存在并且 Kafka 上可能有数千个主题,那么这个 API 似乎效率不高。 (2认同)