检查nodejs中是否存在kafka主题

时间:2016-06-22 12:22:05

标签: node.js apache-kafka

我目前正在使用nodejs和kafka,其中nodejs服务器被设置为接收事件,并且与事件相对应的数据被发送到kafka。在kafka中,如果主题不存在,生产者将相应地动态创建主题。为此,我想检查主题的存在,如果它在创建之前存在或不存在。

我目前正在使用kafka-node模块来实现kafka-node集成功能。但是,我找不到任何能告诉主题是否存在的功能,或者返回kafka中当前存在的所有主题的列表。

在互联网上搜索时,我发现kafka-rest代理通过获取当前主题来帮助了解这一点,但我不明白如何使用它。

任何人都可以告诉我任何其他api,我可以通过它来实现上述功能吗?请帮忙。

1 个答案:

答案 0 :(得分:2)

实际上,你可以同时做两件事。只需使用未记录的Client.loadMetadataForTopics()函数即可。像这样:

var kafka = require('kafka-node');
var client = new kafka.Client("localhost:2181");

client.loadMetadataForTopics(["NonExistentTopic"], (err, resp) => {
  console.log(JSON.stringify(resp))
});

// [{"0":{"nodeId":0,"host":"host-001","port":9092}},{"error":["LeaderNotAvailable"],"metadata":{}}]

请参阅LeaderNotAvailable错误?这意味着该主题不存在。但是 - 假设auto.topic.create.enable设置为true,则对loadMetadataForTopics的调用也会创建主题。因此,您只需一次通话即可 - 如果您获得了error,那么该主题就不存在并且已创建,如果您没有收到错误,则会获得实际的主题元数据。< / p>