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

一、Kafka 工作流程 Kafka 工作流程及文件存储机制
文章图片

Kafka 中用 topic 对消息进行分类,生产者和消费者都面向 topic 处理数据。
一个 topic 会分成多个 partition,放到不同的 broker 上用于提高吞吐量。
同一个 partition 内部又会拆分成多个 segment,防止数据过多时单文件过大。
二、文件存储结构 Kafka 工作流程及文件存储机制
文章图片

硬盘上文件存储类似于:

├── my-topic-0 │├── 00000000000000000000.index │├── 00000000000000000000.log │├── 00000000000000000000.timeindex │├── 00000000003432423452.index │├── 00000000003432423452.log │├── 00000000003432423452.timeindex │└── leader-epoch-checkpoint ├── your-topic-1 │├── 00000000001237987534.index │├── 00000000001237987534.log │├── 00000000001237987534.timeindex │├── 00000000006732746781.index │├── 00000000006732746781.log │├── 00000000006732746781.timeindex │└── leader-epoch-checkpoint

每个文件夹对应一个 topic 分区,文件夹命名规则
[topic name]-[partition id]

文件夹内是对应的 segment,每个 segment 主要包含 .log.index 文件。后续每个Segment文件名为上一个Segment文件最后一条消息的offset值,数值大小为64位,20位数字字符长度。
00000000000000000000.index 00000000000000000000.log 00000000000000000000.timeindex 00000000003432423452.index 00000000003432423452.log 00000000003432423452.timeindex leader-epoch-checkpoint

Segment文件的详细内容:
索引文件存储的元数据指向数据文件中的 message 的物理偏移地址
Kafka 工作流程及文件存储机制
文章图片

三、如何读取数据 【Kafka 工作流程及文件存储机制】以上图为例,要读取offset=170418的消息。
  1. 先通过二分查找确定在哪个 segment
  2. 到对应的 index 文件中查询 offset=170418 的物理偏移地址
  3. 根据物理偏移地址,到 log 文件中读取对应的数据

    推荐阅读