如何获得消费者群体的最后消费偏差?

时间:2016-08-01 11:25:43

标签: java apache-kafka kafka-consumer-api

我在一个使用者组中有两个使用相同kafka主题分区的使用者。我希望从消费者B中得到消费者A的最后读取偏移量。任何想法,如何实现这个?

3 个答案:

答案 0 :(得分:2)

永远不会将单个分区分配给同一组中的两个使用者实例。

您可以使用以下脚本来了解上次消耗的偏移量

sh kafka-consumer-groups.sh --bootstrap-server localhost:9092 --new-consumer --group groupname --describe

答案 1 :(得分:1)

Kafka商店抵消(消费者群组ID,主题,分区)所以首先要注意的是从卡夫卡的角度来看,没有“消费者A的最后读取偏移”之类的东西。使用Kafka使用者API可以获得的所有信息都是针对给定的(组,主题,分区)。消费者API中有两种方法可能有用。

commited():获取给定分区的最后一次提交的偏移量(无论此进程是否发生了提交)。

position():获取将要获取的下一条记录的偏移量(如果存在具有该偏移量的记录)。

如果这不是您所需要的,那么您将不得不自己实施。假设您已经知道如何从消费者A获取最后一次偏移读取,那么消费者A应该将该值存储在消费者B可用的某个位置。这个位置可能是

  • 卡夫卡本人。例如,消费者A可以发布最后读取的偏移量 像ConsumerA-p0和Consumer B这样众所周知的话题可以订阅 这个话题。
  • 动物园管理员。再次,以一条众所周知的道路达成一致。
  • 外部数据库。
  • 如果两个消费者共享相同的操作系统,则有更多基本选项:IPC,文件系统中的文件,受锁保护的内存中的变量等。

答案 2 :(得分:1)

kafka-> bin 中使用以下命令,使用 groupId 更改您的组ID:

sh kafka-consumer-groups.sh --bootstrap-server localhost:29092 --group groupId --describe

您将得到如下输出:

TOPIC  PARTITION  CURRENT-OFFSET  LOG-END-OFFSET  LAG             CONSUMER-ID     HOST            CLIENT-ID
topic1 0          0               35              35              -               -               -
topic2 0          1600            1600            0               -               -               -