【问题标题】:Kafa : How does Kafka stores and retrieves offset for each consumer-group?Kafa:Kafka 如何为每个消费者组存储和检索偏移量?
【发布时间】:2020-03-10 07:05:49
【问题描述】:

我并不是在寻找 API 来完成这个相当内部的实现细节。

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

我的问题是:

本主题中的数据结构究竟是什么?

当一个消费者组死亡并出现时,Kafka 如何查找主题分区中的偏移量,直到该消费者组上次消费为止?

据我了解,Kafka 主题不适合查找数据:例如:查询如下:

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

基本上,我想知道 __consumer_offset 的内部细节或任何用于消费者偏移管理的东西。

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

【问题讨论】:

    标签: apache-kafka offset


    【解决方案1】:

    每个消费者组都根据其哈希值在 __consumer_offsets 主题中分配一个特定的分区。

    然后,偏移量被简单地作为消息写入 __consumer_offsets 主题。

    为了防止这个主题变得太大,定期删除给定消费者组的旧偏移量。

    对于读取,Kafka 代理将这些数据加载到内存中作为启动的一部分,这样每个偏移请求都不会导致磁盘 I/O。由于只频繁访问最新的偏移量,因此在正常操作中,这并不意味着需要在内存中保存太多数据。

    【讨论】:

    • 是不是意味着对于每一个新的concumer-group,Kafka都会在__consumer_offset topic中创建一个新的partition?
    • 不,分区数是恒定的。多个组共享同一个分区。
    • @hoodakaushal, the reads are from memory - gr8 知道。但是从内存中读取这些数据的模型是否与任何其他分区相同,即使用 FIFO 消费者模型。
    猜你喜欢
    • 2016-03-05
    • 2019-05-01
    • 2020-10-25
    • 2016-12-06
    • 2019-04-04
    • 2020-06-11
    • 2019-01-19
    • 1970-01-01
    • 2017-01-01
    相关资源
    最近更新 更多