Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Java中从kafka服务器获取主题列表_Java_Apache Kafka - Fatal编程技术网

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

如何在Java中从kafka服务器获取主题列表,java,apache-kafka,Java,Apache Kafka,我使用的是kafka 0.8版本,非常新 我想知道在kafka服务器中创建的主题列表以及它的 元数据。 有什么API可以找到这一点吗 基本上,我需要编写一个Java使用者,它应该自动发现kafka服务器中的任何主题 参数。我需要服务器中所有主题的信息。最好从Kafka附带的示例shell脚本开始。 在发行版的/bin目录中,可以使用一些shell脚本,其中一个是./kafka-topic-list.sh 如果您在不指定主题的情况下运行它,它将返回所有主题及其元数据。 见: 该shell脚本依次

我使用的是
kafka 0.8
版本,非常新

我想知道在
kafka服务器中创建的主题列表以及它的
元数据。
有什么API可以找到这一点吗

基本上,我需要编写一个Java使用者,它应该自动发现
kafka服务器中的任何主题

参数。我需要服务器中所有主题的信息。

最好从Kafka附带的示例shell脚本开始。 在发行版的/bin目录中,可以使用一些shell脚本,其中一个是./kafka-topic-list.sh 如果您在不指定主题的情况下运行它,它将返回所有主题及其元数据。 见:

该shell脚本依次运行:


以上都是对0.8卡夫卡版本的引用,因此如果您使用的是不同的版本(甚至是点差异),请确保在github上使用适当的分支/标记。您可以使用zookeeper API获取代理列表,如下所述:

    ZooKeeper zk = new ZooKeeper("zookeeperhost, 10000, null);
    List<String> ids = zk.getChildren("/brokers/ids", false);
    List<Map> brokerList = new ArrayList<>();
    ObjectMapper objectMapper = new ObjectMapper();

    for (String id : ids) {
        Map map = objectMapper.readValue(zk.getData("/brokers/ids/" + id, false, null), Map.class);
        brokerList.add(map);
    }
ZooKeeper zk=新的ZooKeeper(“zookeeperhost,10000,空);
List id=zk.getChildren(“/brokers/id”,false);
List brokerList=new ArrayList();
ObjectMapper ObjectMapper=新的ObjectMapper();
用于(字符串id:ids){
Map Map=objectMapper.readValue(zk.getData(“/brokers/ids/”+id,false,null),Map.class);
添加(地图);
}
使用此代理列表通过以下链接获取所有主题

卡夫卡0.9.0版

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

例如

地图主题;
Properties props=新属性();
道具放置(“bootstrap.servers”,“1.2.3.4:9092”);
props.put(“group.id”,“测试消费者组”);
put(“key.deserializer”、“org.apache.kafka.common.serialization.StringDeserializer”);
put(“value.deserializer”、“org.apache.kafka.common.serialization.StringDeserializer”);
卡夫卡消费者=新卡夫卡消费者(道具);
topics=consumer.listTopics();
consumer.close();

如果您想从Zookeeper中提取代理或其他卡夫卡信息,那么
kafka.utils.ZkUtils
提供了一个很好的界面。下面是我必须列出所有Zookeeper代理的代码(还有很多其他方法):

列出listBrokers(){
最终ZkConnection ZkConnection=新ZkConnection(connectionString);
最终int sessionTimeoutMs=10*1000;
最终int连接TimeOutms=20*1000;
最终ZkClient ZkClient=新ZkClient(connectionString,
会话时间,
connectionTimeoutMs,
ZKStringSerializer$.MODULE$);
final ZkUtils ZkUtils=新的ZkUtils(zkClient,zkConnection,false);
seqAsJavaList(zkUtils.getAllBrokerIncluster());
}

我认为这是最好的方法:

ZkClient zkClient = new ZkClient("zkHost:zkPort");
List<String> topics = JavaConversions.asJavaList(ZkUtils.getAllTopics(zkClient));
ZkClient-ZkClient=newzkclient(“zkHost:zkPort”);
List topics=JavaConversions.asJavaList(ZkUtils.getAllTopics(zkClient));

使用Scala:

import java.util.{Properties}
import org.apache.kafka.clients.consumer.KafkaConsumer

object KafkaTest {
  def main(args: Array[String]): Unit = {

    val brokers = args(0)
    val props = new Properties();
    props.put("bootstrap.servers", brokers);
    props.put("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
    props.put("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");

    val consumer = new KafkaConsumer[String, String](props);
    val topics = consumer.listTopics().keySet();

    println(topics)
  }
}

如果你正在寻找java api,不幸的是,目前除了你提到的版本0.9.xThanks之外,没有其他版本。这正是我要找的!OP询问的主题列表不是broker你得到了broker列表,然后得到了主题,上面的方法有什么错。只是代码段没有提供答案和链接所做的比所要求的要多。与其使用链接,不如将解决方案嵌入到您的答案中。OP所要求的主题列表不是Brokers这些可以从windows上运行的java应用程序远程执行吗?
ZkClient zkClient = new ZkClient("zkHost:zkPort");
List<String> topics = JavaConversions.asJavaList(ZkUtils.getAllTopics(zkClient));
import java.util.{Properties}
import org.apache.kafka.clients.consumer.KafkaConsumer

object KafkaTest {
  def main(args: Array[String]): Unit = {

    val brokers = args(0)
    val props = new Properties();
    props.put("bootstrap.servers", brokers);
    props.put("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
    props.put("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");

    val consumer = new KafkaConsumer[String, String](props);
    val topics = consumer.listTopics().keySet();

    println(topics)
  }
}