web-dev-qa-db-fra.com

Comment obtenir la liste de sujets du serveur Kafka en Java

J'utilise la version kafka 0.8 et beaucoup de nouveauté.

Je souhaite connaître la liste des rubriques créées dans kafka server en même temps que Métadonnées . Existe-t-il une API pour découvrir cela?

Fondamentalement, je dois écrire à un consommateur Java qui devrait découvrir automatiquement tout sujet dans kafka server. Il existe une API pour extraire TopicMetadata, mais cela nécessite le nom du sujet en tant qu'entrée Parameters.J'ai besoin d'informations pour tous les sujets présents sur le serveur.

14
Anand

Les exemples de scripts Shell fournis avec Kafka constituent un bon point de départ. Dans le répertoire/bin de la distribution, vous pouvez utiliser certains scripts Shell, dont ./kafka-topic-list.sh Si vous l'exécutez sans spécifier de sujet, tous les sujets seront retournés avec leurs métadonnées. Voir: https://github.com/Apache/kafka/blob/0.8/bin/kafka-list- topic.sh

Ce script Shell exécute à son tour: https://github.com/Apache/kafka/blob/0.8/core/src/main/scala/kafka/admin/ListTopicCommand.scala

Ce qui précède fait référence à la version 0.8 Kafka. Si vous utilisez une version différente (même une différence de point), veillez à utiliser la branche/balise appropriée sur github.

4
David Corley

avec Kafka 0.9.0

vous pouvez lister les sujets sur le serveur avec la méthode consommateur fournie listTopics ();

par exemple.

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();
24
betaboy00

Je pense que c'est la meilleure façon:

ZkClient zkClient = new ZkClient("zkHost:zkPort");
List<String> topics = JavaConversions.asJavaList(ZkUtils.getAllTopics(zkClient));
4
fengkb

Si vous voulez extraire des informations de courtier ou autre-kafka de Zookeeper, kafka.utils.ZkUtils fournit une interface agréable. Voici le code que je dois lister tous les courtiers zookeeper (il y a une tonne d'autres méthodes ici):

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());
}
1
hba

Utilisation de 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)
  }
}
1
Ranga Reddy

Vous pouvez utiliser l’API zookeeper pour obtenir la liste des courtiers mentionnée ci-dessous:

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

Utilisez cette liste de courtiers pour obtenir tous les sujets en utilisant le lien suivant

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

0
Harvinder Singh