2016-12-06 70 views
0
的關係

我使用的是卡夫卡0.10 kafkaConsumer API來獲取消費者和主題下消費者訂閱設置。現在如何獲得消費羣和主題

我可以通過題目列表的方法獲得主題和partitionIds成功。

要獲取消費者組數據,我在KafkaConsumer下找不到方法,但我可以通過「zookeeper.getChildren(ZkUtils.ConsumersPath(),false)」從zookeeper獲取組列表。

我的問題是如何獲得組和主題的關係。 我知道一個團隊可以訂閱一個或多個主題,但我不知道如何通過KafkaConsumer API或動物園管理員獲取數據。

我曾試圖kafkaConsumer.subscription(),但返回的是一個空的列表。

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

+0

你到底想要什麼所有的消費羣體,併爲每個所有主題它並訂閱BTW:??'KafkaConsumer#訂閱()'返回此單個消費者的預訂 - 如果您還沒有訂閱任何主題(不知道您是否確定),它將返回一個空列表。 –

+0

您是否在調用subscription()之前調用KafkaConsumer.subscribe()或assign()方法? ? – amethystic

+0

謝謝薩克斯。對不起,描述不太清楚。我是n不要訂閱。有一個存在的kafka集羣。我只想獲得它的消費羣體和每個羣組的相關主題。 @ MatthiasJ.Sax – Hanqing

回答

1

有一個在KafkaConsumer因此得到消費羣信息的API。 KafkaConsumer旨在消費來自主題的消息併成爲消費者組的一部分。但沒有別的。

在命令行中,你可以使用bin/kafka-consumer-groups.sh得到消費者的組信息。在內部,它利用了kafka.admin.ConsumerGroupCommand - 你可以嘗試將它集成到你的Java代碼中。

您也可以更深入一個槓桿並使用非公開API(只需查看kafka.admin.ConsumerGroupCommand的代碼即可瞭解其在內部是如何工作的 - 但是,如果您稍後要升級,這當然很脆弱。非公開的API可以爲當然的較新版本改變

+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

是的。它確實返回無效。您需要深入一層,提取並使用實際工作的代碼。只調用main是不夠的。在內部,ConsumerGroupCommand收集所有信息並將其打印到標準輸出。只需查找這些部分,並嘗試複製代碼以將所需信息返回給您的應用。 –