Kafka 的存储结构是什么,详细介绍

Kafka 的存储结构围绕主题(Topic)、分区(Partition)、段文件(Segment File)、以及索引(Index)展开 ,以下是详细的结构说明:

Kafka 存储结构详解

1. 主题(Topic)

Kafka 的消息按 主题 分类,生产者向主题发送消息,消费者从主题读取。

一个主题会被划分为多个 分区(Partition),每个分区是一个 有序、不可变的消息序列。

2. 分区(Partition)

每个分区相当于一个 逻辑日志(log),底层对应服务器上的一个目录。

每个消息在分区中都有一个唯一的 偏移量(Offset),表示它在该分区中的位置。

3. 分区目录结构

例如,主题 test-topic 有 3 个分区,则可能会在磁盘目录 /kafka/logs/ 下看到:

/kafka/logs/
 ├── test-topic-0/
 ├── test-topic-1/
 └── test-topic-2/

4. 段文件(Segment File)

每个分区下会按大小或时间切分成多个段文件(segment),例如:

test-topic-0/
 ├── 00000000000000000000.log
 ├── 00000000000000000000.index
 ├── 00000000000000000000.timeindex
 ├── 00000000000000001000.log
 └── ...
文件类型描述
.log 文件实际消息数据(key, value, timestamp)
.index 文件存储 offset 到 .log 中物理位置的映射
.timeindex 文件存储时间戳到 offset 的映射,用于基于时间查询消息

5. 索引机制

Kafka 使用两个索引加速消息查找:

  • OffsetIndex:Offset ➝ 文件位置,用于根据 Offset 快速定位。

  • TimeIndex:时间戳 ➝ Offset,用于根据时间范围查找。

6. 日志清理(Log Cleanup)机制

Kafka 支持两种清理策略:

策略描述
delete默认策略,超过配置的保留时间/大小后删除旧段文件
compact保留每个 key 的最后一条记录,适合类似数据库的日志

7. Kafka 不修改日志

Kafka 所有日志都是 追加写入,不修改历史记录。这使得 Kafka 非常高效,并支持重复消费与故障恢复。

总结图示(结构图)

Topic
 ├── Partition 0
 │   ├── Segment 1: 00000000000000000000.log
 │   ├── Segment 2: 00000000000000001000.log
 │   └── ...
 └── Partition 1
     ├── Segment 1: 00000000000000000000.log
     ├── Segment 2: 00000000000000001000.log
     └── ...

每个 Segment:

  • .log: 日志文件(消息)

  • .index: offset索引

  • .timeindex: 时间索引

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值