我对主题偏移量在Kafka中的工作方式有疑问,它们是否将类似B-Tree的结构存储在Kafka中?
我要求这样做的特定原因,可以说我有一个在主题中有1000万条记录的主题,这意味着如果不使用压缩或关闭压缩,则现在偏移量为1000万,如果我使用consumer.seek(5000000) ,它将像LinkList一样工作,我的意思是,它将偏移量为0,并尝试从那里跳到第5000000个偏移量,或者它确实具有像结构这样的索引,才能确切地告诉日志中第5000000个记录在哪里?
寻求答案?
答案 0 :(得分:1)
Kafka记录按顺序存储在日志中。确切的格式在documentation中有详细说明。
Kafka通常期望读取是连续的,因为消费者按顺序获取记录。但是,当需要随机访问(通过查找或从特定位置重新启动)时,Kafka使用索引文件根据其偏移量快速找到记录。
Kafka日志由多个部分组成。每个段都有一个索引和一个timeindex文件,它们将偏移量和时间戳映射到文件位置。可以使用index.interval.bytes
配置将条目添加到索引的频率。使用这些文件,Kafka可以立即搜索到附近的位置,并避免重新读取所有消息。
您可能已经注意到异常关闭后,Kafka正在重建索引几分钟。这些索引用于归档正在重建的位置查找。