根据documentation of Kafka Kafka中用于存储消息的数据结构是一个简单的日志,其中所有写入实际上只是追加到日志中。
我在这里不明白的是,许多人声称Kafka的性能是恒定的,而不管它处理的数据大小如何。
在线性数据结构中,随机读取如何成为恒定时间?
如果我有一个分区主题,其中包含10亿条消息。如果读取始终是连续的,则检索第一条消息所花费的时间与检索最后一条消息所花费的时间如何相同?
答案 0 :(得分:0)
在Kafka中,每个分区的日志都不是单个文件。实际上,它被分成固定大小的段。
对于每个分段,Kafka都知道开始和结束偏移量。因此,对于随机读取,很容易找到正确的句段。
然后,每个段都有几个索引(基于时间和偏移)。这些是名为*.index
和*.timeindex
的文件。这些文件使您可以直接跳转到所需读物附近(或附近)的位置。
因此您可以看到段的总数(也就是日志的总大小)并没有真正影响读取逻辑。
还请注意,段的大小,索引的大小和索引间隔都是可配置的设置(即使在主题级别)。