在Kafka 0.9中,有一种方法可以列出消费者群体中所有消费者的偏移量吗?

时间:2016-01-30 22:13:59

标签: apache-kafka kafka-consumer-api

我正在使用Kafka 0.9 new Consumer API

我让Kafka负责消费者的抵消。我让消费者​​在同一主题的多台机器上运行。

我试图找出以下内容:

  • 在消费者群体中注册的消费者
  • 每位消费者的抵消

我认为消费者群体 - 消费者关系将存储在ZooKeeper中。我在ZooKeeper中看到了消费者节点,它没有孩子。

通过查看代码,我可以看到的偏差正在写入kafka,但我不知道他们写的是什么主题?

3 个答案:

答案 0 :(得分:2)

似乎至少有两种类型的键值对存储在__consumer_offsets主题@nautilus指出。

  1. 组元数据信息
  2. 偏移提交
  3. 据我所知,Kafka使用自己的架构和序列化。您可以通过GroupMetadataManager.OFFSET_COMMIT_VALUE_SCHEMA_V0查看有关这些结构的更多信息:

    • GroupMetadataManager.GROUP_METADATA_KEY_SCHEMA
    • GroupMetadataManager.GROUP_METADATA_VALUE_SCHEMA_V0
    • class UploadPhoto(APIView): #authentication_classes = (TokenAuthentication,) permission_classes = ()#(IsAuthenticated,) def put(self, request, username): user = User.objects.get(username = username) userprofile = UserProfile.objects.get(user= user) photo = PhotoSerializer(userprofile,data = request.data) photo.is_valid(raise_exception=True) photo.save() return Response(status= status.HTTP_200_OK)
    • {{1}}

答案 1 :(得分:1)

正如@hba所提到的,编码/解码的细节可以在底部附近的kafka.coordinator.GroupMetadataManager找到。查找readMessageKey以及以下两种方法。基本上,你需要的是一系列调用,如

import org.apache.kafka.common.protocol.types.Type;
...
ByteBuffer bb = ByteBuffer.wrap(consumerRecord.key())
short version = bb.getShort();
String group = (String)Type.String.read(bb);
String topic = (String)Type.String.read(bb);
int partition = (int)Type.INT32.read(bb);

好消息是org.apache.kafka.common.protocol.types.Type是Java api的一部分,独立于主要的Jar。丑陋的部分是,上面的代码片段不完整。每个consumerRecord.key()consumerRecord.value()都有两个版本,一个版本必须模仿上述方法的解码。没什么大不了的,只是有点单调乏味。

如果您的项目可以依赖于scala-jar,完整的kafka-jar和Kafka所需的一两个罐子,您也可以使用GroupMetadataManager.readMessageKey(bb)和其他两种方法来阅读关键和价值。至少在0.9.0.1公开。

答案 2 :(得分:0)

如果由kafka处理的偏移量未存储在zookeeper中,则它存储在主题调用中,并且#_; consumer_offsets - #"在kafka-logs文件夹中。

如果您需要有关使用者组的更多信息,请检查bin / kafka-consumer-groups.sh

,当您执行poll()时,可以通过检查KafkaRecords中的偏移字段来查找每个使用者的偏移量。

希望它有帮助!