How to get topic list from kafka server in Java

后端 未结 6 502

I am using kafka 0.8 version and very much new to it.

I want to know the list of topics created in kafka server along with it\'s metadata.

相关标签:
6条回答
  • 2020-12-29 07:15

    You can use zookeeper API to get the list of brokers as mentioned below:

        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);
        }
    

    Use this broker list to get all the topic using the following link

    https://cwiki.apache.org/confluence/display/KAFKA/Finding+Topic+and+Partition+Leader

    0 讨论(0)
  • 2020-12-29 07:19

    A good place to start would be the sample shell scripts shipped with Kafka. In the /bin directory of the distribution there's some shell scripts you can use, one of which is ./kafka-topic-list.sh If you run that without specifying a topic, it will return all topics with their metadata. See: https://github.com/apache/kafka/blob/0.8/bin/kafka-list-topic.sh

    That shell script in turn runs: https://github.com/apache/kafka/blob/0.8/core/src/main/scala/kafka/admin/ListTopicCommand.scala

    The above are both references to the 0.8 Kafka version, so if you're using a different version (even a point difference), be sure to use the appropriate branch/tag on github

    0 讨论(0)
  • 2020-12-29 07:21

    I think this is the best way:

    ZkClient zkClient = new ZkClient("zkHost:zkPort");
    List<String> topics = JavaConversions.asJavaList(ZkUtils.getAllTopics(zkClient));
    
    0 讨论(0)
  • 2020-12-29 07:25

    If you want to pull broker or other-kafka information from Zookeeper then kafka.utils.ZkUtils provides a nice interface. Here is the code I have to list all zookeeper brokers (there are a ton of other methods there):

    List<Broker> listBrokers() {
    
            final ZkConnection zkConnection = new ZkConnection(connectionString);
            final int sessionTimeoutMs = 10 * 1000;
            final int connectionTimeoutMs = 20 * 1000;
            final ZkClient zkClient = new ZkClient(connectionString,
                                                   sessionTimeoutMs,
                                                   connectionTimeoutMs,
                                                   ZKStringSerializer$.MODULE$);
    
            final ZkUtils zkUtils = new ZkUtils(zkClient, zkConnection, false);
    
            scala.collection.JavaConversions.seqAsJavaList(zkUtils.getAllBrokersInCluster());
    }
    
    0 讨论(0)
  • 2020-12-29 07:26

    with Kafka 0.9.0

    you can list the topics in the server with the provided consumer method listTopics();

    eg.

    Map<String, List<PartitionInfo> > topics;
    
    Properties props = new Properties();
    props.put("bootstrap.servers", "1.2.3.4:9092");
    props.put("group.id", "test-consumer-group");
    props.put("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
    props.put("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
    
    KafkaConsumer<String, String> consumer = new KafkaConsumer<String, String>(props);
    topics = consumer.listTopics();
    consumer.close();
    
    0 讨论(0)
  • 2020-12-29 07:34

    Using 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)
      }
    }
    
    0 讨论(0)
提交回复
热议问题