Kafka:Kafka如何为每个消费者组存储和检索偏移量?

3

我并不是在寻找API来完成这个,而是想了解内部实现细节。

我知道Kafka的最新版本将消费者组的偏移量存储在一个特殊的Kafka主题__consumer_offset中。

我的问题是:

在这个主题中驻留的数据结构究竟是什么?

当消费者组死亡并重新启动时,Kafka如何查找消费者组上次消费的Topic-Partitions的偏移量?

据我的理解,Kafka主题并不适合查找数据:例如查询语句:

Select *offset* from __consumer_offset where consumer-group-name=*consumer-group* and topic=*topic-1*

基本上,我想了解__consumer_offset或用于消费者偏移量管理的任何内容的内部详细信息。

我阅读了这个维基页面 https://cwiki.apache.org/confluence/display/KAFKA/Offset+Management,但无法理解其中关于内存数据结构的部分。

1个回答

3
每个消费者组根据其哈希值在 __consumer_offsets 主题中分配一个特定的分区。然后,偏移量被简单地写入 __consumer_offsets 主题作为消息。
为了防止该主题过大,定期删除给定消费者组的旧偏移量。
对于读取操作,Kafka broker在启动时将此数据加载到内存中,以便每个偏移量请求不会引起磁盘I / O。由于通常只有最新的偏移量经常访问,因此在正常操作中,要保留的数据量并不多。

1
这是否意味着对于每个新的消费者组,Kafka都会在__consumer_offset主题中创建一个新的分区? - charany1
1
不,分区数是恒定的。多个组共享同一个分区。 - hoodakaushal
@hoodakaushal,“这些读取来自内存”- 很好知道。但是,读取此数据的模型与任何其他分区相同,即使用FIFO消费者模型吗? - samshers

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接