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.
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.
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();
Je pense que c'est la meilleure façon:
ZkClient zkClient = new ZkClient("zkHost:zkPort");
List<String> topics = JavaConversions.asJavaList(ZkUtils.getAllTopics(zkClient));
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());
}
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)
}
}
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