存储机制

Kafka 高性能的秘密之一在于其精妙的存储设计。理解 Log Segment、索引机制和零拷贝是深入掌握 Kafka 的关键。

存储架构

目录结构

/kafka-logs/
├── orders-0/                    # Topic: orders, Partition: 0
│   ├── 00000000000000000000.log     # 第一个 Segment
│   ├── 00000000000000000000.index   # 偏移量索引
│   ├── 00000000000000000000.timeindex # 时间戳索引
│   ├── 00000000000000123456.log     # 第二个 Segment (baseOffset=123456)
│   ├── 00000000000000123456.index
│   ├── 00000000000000123456.timeindex
│   └── leader-epoch-checkpoint
├── orders-1/                    # Topic: orders, Partition: 1
│   └── ...
└── __consumer_offsets-0/        # 内部 Topic: 消费位移
    └── ...

存储层次

Log Segment

Segment 结构

消息格式

Segment 配置

索引设计

稀疏索引

Kafka 使用稀疏索引,不是每条消息都建立索引:

查找过程

时间索引

日志清理

两种清理策略

Delete 策略

Compact 策略

零拷贝

传统数据传输

零拷贝(sendfile)

Java 实现

Page Cache

Page Cache 的作用

顺序写

顺序写 vs 随机写

面试高频问题

1. Kafka 为什么性能这么高?

2. Kafka 的索引机制是怎样的?

3. Log Compaction 的原理?

4. 零拷贝是如何实现的?

总结

Last updated