2016-12-06 67 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收集所有信息并将其打印到标准输出。只需查找这些部分,并尝试复制代码以将所需信息返回给您的应用。 –