2016-12-06 5 views
0

私はkafka 0.10 kafkaConsumer APIを使用して、コンシューマ購読の下でコンシューマとトピックセットを取得しています。消費者グループとトピックの関係を取得する方法

topiclistメソッドでトピックとpartitionIdを正常に取得できます。

消費者グループのデータを取得するには、KafkaConsumerのメソッドが見つかりませんでしたが、 "zookeeper.getChildren(ZkUtils.ConsumersPath()、false);"でZookeeperからグループリストを取得できます。

私の質問は、グループとトピックの関係を得る方法です。 私は1つまたは複数のトピックを購読できるグループを知っていますが、KafkaConsumer APIまたはzookeeperからデータを取得する方法はわかりません。

私はkafkaConsumer.subscription()を試していましたが、returnは空のリストです。私が参照するもの

https://kafka.apache.org/0101/javadoc/index.html?org/apache/kafka/clients/consumer/KafkaConsumer.html

+0

すべてのコンシューマ・グループとそれが購読したすべてのトピックごとに、Btw: 'KafkaConsumer#subscription()'がこの単一のコンシューマのサブスクリプションを返します。 –

+0

サブスクリプション()を呼び出す前にKafkaConsumer.subscribe()またはassign()メソッドを呼び出したことがありますか? ? – amethystic

+0

サックスありがとうございました。購読してください。存在するカフカクラスターがあります。私はその消費グループと各グループの関連トピックを取得したいです。 @ MatthiasJ.Sax – Hanqing

答えて

1

ありKafkaConsumerにはAPIはありませんので、消費者グループ情報を取得します。 KafkaConsumerは、トピックからのメッセージを消費し、消費者グループの一部になるように設計されています。しかし、他には何もない。

コマンドラインでは、bin/kafka-consumer-groups.shを使用してコンシューマグループ情報を取得できます。内部的にはkafka.admin.ConsumerGroupCommandを利用しています。これをJavaコードに統合しようとすることもできます。

また、1つのレバーをもっと深くして非公開のAPIを使用することもできます(kafka.admin.ConsumerGroupCommandのコードを調べて、内部的にどのように動作するかを確認します)。後でアップグレードする場合はもちろん脆弱です。

+0

ありがとうございます@Matthias J. Sax。私は以下のコードを使用してkafkaサーバーからコンシューマ・グループ・リストを取得します:String [] commands = new String [] {"list"、 " - new-consumer"、 " - bootstrap-server"、 "hostIP:9092" }; kafka.admin.ConsumerGroupCommand.main(コマンド);しかし、 "main"関数はvoidを返すので、コードで結果を取得できません。私はkafka 0.10を使用して、ConsumerGroupCommandとConsumerGroupCommand.KafkaConsumerGroupServiceでグループリストを取得できるメソッドがないようです。 – Hanqing

+0

はい。それはvoidを返す。あなたは一層深く行き、実際の作業を行うコードを抽出して使用する必要があります。 mainを呼び出すだけでは不十分です。内部的には、ConsumerGroupCommandは単にstdoutに出力するすべての情報を収集します。これらの部分を探してコードをコピーして、必要な情報をアプリに返すようにしてください。 –

関連する問題