kafka安装目录下有个data文件夹,我有个topic 起名叫first,并且有两个分区。图中first-0,和first-1 就是存储该topic 数据的地方,由于kafka是将数据存储在磁盘,为了提升读取效率,所以kafka也是采取了分片和索引的手段来提升数据查找读取效率。
分区文件的索引文件与数据文件随便cd 到某一个分区文件下,就会看到有.index和.log两个文件,顾名思义.index就是该分区下的索引文件,.log文件就是正儿八经存数据的文件了。index 和 log 文件以当前 segment(分片) 的第一条消息的 offset 命名。
kafka partition文件示意图由于生产者生产的消息会不断追加到 log 文件末尾,为防止 log 文件过大导致数据定位
效率低下,Kafka 采取了分片和索引机制,将每个 partition 分为多个 segment。每个 segment
对应两个文件——“.index”文件和“.log”文件。这些文件位于一个文件夹下,该文件夹的命名
规则为:topic 名称+分区序号。例如,first 这个 topic 有三个分区,则其对应的文件夹为 first0,first-1,first-2。
index文件和log文件示意图“.index”文件存储大量的索引信息,“.log”文件存储大量的数据,索引文件中的元数据指向对应数据文件中 message 的物理偏移地址。“3” 代表该分区下的第3条消息,“756”代表该条消息在所有分区中的偏移量,根据“756”这个偏移量去“.log”文件中查找 offset=3的消息。
这样说大概能理解kafka的文件存储流程了吗?
网友评论