Kafka工作流程及文件存储机制

Kafka工作流程

Kafka工作流程及文件存储机制

Kafka工作流程及文件存储机制

  • Kafka 中消息是以 topic 进行分类的,生产者生产消息,消费者消费消息,都是面向 topic 的。
  • topic 是逻辑上的概念,而 partition 是物理上的概念。
  • 每个partition都有对应的.log文件,该 log 文件中存储的就是 producer 生产的数据。
  • producer生产的数据会发送给topic的每个partition,并追加到partition的.log文件中。
  • 消费者组中的每个消费者,都会实时记录自己消费到了哪个offset,以便出错恢复时,从上次的位置继续消费。
  • producer发送数据和消费者消费数据的对象都是partition中的leader,其他follower会实时从leader中同步数据,和leader中的数据保持一致。
  • 每个partition中的数据是有序的。

Kafka文件存储机制

Kafka工作流程及文件存储机制

  • 每个topic可以分为多个partition。
  • Kafka 采取了分片和索引机制,将每个 partition 分为多个 segment。
  • 每个partition可以分为多个segment。
  • 每个segment大小是相同的,且都对应若一个.log和.index文件。
  • .log和.index文件成对存在,.log文件记录的是producer生产的数据,.index文件记录的是.log文件中每条数据的物理偏移量。
  • 每个partition的数据都位于同一个目录下,并以"topic名称_partition号"的格式命名。
  • partition数据的全局存放路径可以在Kafka下bin/config/server.properties中配置,配置参数为:log.dirs=xxx/xxx/xxx

index文件和log文件

Kafka工作流程及文件存储机制
Kafka工作流程及文件存储机制

  • index文件和log文件都以该segment的第一个消息的offset命名。数值最大为64位long大小,19位数字字符长度,没有数字用0填充。
  • .index文件存储大量的索引信息,.log文件存储大量的数据,索引文件中的元数据指向对应数据文件中 message的物理偏移地址。
  • 示例:查找offset为368722的数据
    1. 首先根据偏移量通过二分查找法快速定位到368722对应的.index文件和.log文件分别为:00000000000000368739.index和00000000000000368739.log;
    2. .index文件中每条索引数据的大小也是固定的,因此可以通过offset快速定位到所要查找索引的位置为:3,497。3表示:该索引对应的消息是该segment中的第三条数据,497表示:该索引对应的数据在00000000000000368739.log中的物理偏移量是497;
    3. 查找到了368722在00000000000000368739.log中的物理偏移量,也就找到了索要查找到的数据。

message物理结构

Kafka工作流程及文件存储机制

参数说明
关键字 解释
8 byte offset 在parition(分区)内的每条消息都有一个有序的id号,这个id号被称为偏移(offset),它可以唯一确定每条消息在parition(分区)内的位置。即offset表示partiion的第多少message
4 byte message size message大小
4 byte CRC32 用crc32校验message
1 byte “magic” 表示本次发布Kafka服务程序协议版本号
1 byte “attributes” 表示为独立版本、或标识压缩类型、或编码类型
4 byte key length 表示key的长度,当key为-1时,K byte key字段不填
K byte key 可选
value bytes payload 表示实际消息数据

文章部分内容参考自:https://tech.meituan.com/2015/01/13/kafka-fs-design-theory.html