2016-08-01 107 views
1

我有一个消费者组中有两个消费者分配了相同的kafka主题分区。我希望从消费者B内部获得最后一次读取偏移量,消费者A.任何想法,如何实现这一点?如何获取消费者组的最后消费抵消?

+0

你想有一个以上的消费者在消费从单个分区平行吗? –

+0

@LucianoAfranllie类似的,但我可以让消费者平行读,但我希望只跟踪其他消费者在卡夫卡的最后读取偏移量。 – swappy

回答

2

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

您可以使用下面的脚本来知道最后的消耗偏移

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

为什么它不会被分配,记住我说的是分配和未订阅。 – swappy

+0

如果您手动分配分区,则它表现为简单消费者(低级消费者)。注意你的语言。 –

+0

不要听起来傲慢,但现在你觉得我应该继续执行这个问题? – swappy

0

卡夫卡店偏移量由(消费者组ID,主题,分区),所以首先要注意的一点是,从卡夫卡点认为没有像“最后一次读取消费者A的抵消额”那样的东西。您可以通过Kafka使用者API获得的所有信息都适用于给定的(组,主题,分区)。消费者API中有两种方法可能有用。

commited():获取给定分区的最后提交的偏移量(无论提交是由此进程还是其他进程发生的)。

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

如果这不是你所需要的,那么你将不得不自己实现一些东西。假设你已经知道如何获得最后抵消消费的读操作,那么消费者A应该是值存储在某个位置,提供给消费者B.这个位置可能是

  • 卡夫卡本身。例如,消费者A可以将最近的读取偏移量发布到 像ConsumerA-p0这样的众所周知的主题,而消费者B可以订阅 这个主题。
  • 动物园管理员。再次,在一个众所周知的道路上达成一致。
  • 外部数据库。
  • 更基本的选择,如果消费者都共享同一个操作系统:IPC,在文件系统中的文件,在内存与锁保护的变量等
+0

我同意你和理论上它看起来似乎合理,但我想知道是否有某些功能由kafka本身提供服务的目的 – swappy

+0

添加更多的细节给我的答案。我认为这些都是你有的选择。 –