Skip to main content
Documents
Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Back to homepage

Kafka 架构详解(底层原理)

1. Kafka 总体架构图(文字版)

Kafka 主要由 5 大核心组件构成:

Producer  ->  Broker(Topic/Partition/Replica)  ->  Consumer Group

                    ^
                    |

                Controller

                    ^
                    |

                 存储层

2. Broker 架构(核心服务器)

一个 Kafka 集群由多个 Broker(节点)组成,每个 Broker 负责:

  • Topic 与 Partition 的存储
  • 读写请求处理
  • Leader 选举
  • 与 Controller 通信(位置信息、元数据)

它是 Kafka 的运行核心。

3. Topic & Partition(提高吞吐的关键)

Topic:消息集合(逻辑概念)

Partition:物理分片(真正存储消息的地方)

例如:

  • Topic: order
  • Partition 数量: 3
  • 对应路径:
    • /kafka-logs/order-0
    • /kafka-logs/order-1
    • /kafka-logs/order-2

为什么 Kafka 使用 Partition?

因为单线程写单文件速度有限。但:

“多个 Partition = 多个日志文件 = 多线程 + 顺序写 = 吞吐线性提升”

Kafka 的扩容本质是:

增加 Partition 数量(或 Broker 数量)

4. Kafka 存储架构:Commit Log(高性能的秘密)

每个 Partition 底层就是一个 追加写日志:

message-0
message-1
message-2
...
message-N

写入方式:

  • 完全顺序写,磁盘可以满速
  • 利用 OS PageCache 进行内存缓存
  • 使用零拷贝(zero-copy)提升读取速度

Kafka 不支持随机删除消息,而是通过段切分 + 定期清理:

  • 以一定大小切分 Segment(log + index)
  • 到了保留时间或大小自动删除旧文件

5. 副本机制(Replica)— 高可用基础

每个 Partition 都有多份副本,默认:

replicas = 3

包含:

  • Leader:读写的核心
  • Follower:同步 Leader 数据

例如:

order-0
  Leader: Broker1
  Follower: Broker2, Broker3

Leader 崩溃时,Controller 会挑一个 Follower 成为新的 Leader。

6. ISR(In-Sync Replicas)— 可靠性保障

ISR = 同步进度足够快的副本集合

  • (被认为是“健康副本”)

写入消息时,Kafka 的 acks 机制依赖 ISR:

  • acks=all -> Leader + ISR 中所有副本都写入成功才确认
  • 当 ISR 掉到只剩一个副本时,Kafka 存在数据丢失风险

ISR 的存在避免了慢副本拖慢整体吞吐。

7. Controller(控制器)— 集群的大脑

Controller 节点负责:

  • Partition Leader 选举
  • 元数据管理(topic、分区、副本)
  • Broker 上线/下线管理
  • 通知 Producer/Consumer 更新元数据

如果 Controller 宕机,会选举一个新的 Controller,整个过程对业务透明。

8. Kafka 写入流程(超清晰)

Producer -> Broker Leader -> Follower -> ACK 返回

详细步骤:

  1. Producer 从 Controller 获取 meta 信息(Leader 节点位置)
  2. Producer 根据分区器规则选择分区
  3. Producer 直接将数据写入 Leader Partition
  4. Leader 写入本地 Log(顺序写 + PageCache)
  5. Follower 从 Leader 拉取数据同步
  6. 当满足 acks 条件后,Leader 返回 ACK

Kafka 的高吞吐源自:

  • 分区并行写
  • 顺序写磁盘
  • PageCache
  • 批量发送(batch)
  • 压缩(zstd/lz4)

9. Kafka 读取流程(Zero-Copy)

Consumer -> Broker Leader -> Zero-Copy -> Network -> Consumer

Follower 默认只用于同步,不接收 Consumer 请求。

  • (除非开启 “Follower Fetching”)

读取流程:

  1. Consumer 从 Broker 获取 offset 对应的数据
  2. Leader 使用 index 找到 file offset
  3. 使用 sendfile() 执行零拷贝,直接从文件发送至 socket
  4. Consumer 收到数据并提交 offset

高性能来源:

  • Index + Log 文件格式简单
  • 顺序读取
  • Zero-Copy(不用经过用户态->内核态来回拷贝)

10. Offset 管理(消费进度)

Kafka 不记录“消息是否消费”,只记录:

  • Consumer Group 的消费位置(offset)

Offset 存放于:

  • 旧版本:ZooKeeper
  • 现在:Kafka 内置 Topic __consumer_offsets

好处:

  • 高性能
  • 多副本持久化
  • 可回溯消费(重置 offset)

11. Rebalance(再均衡)机制

当以下任一场景触发:

  • Consumer 加入 Group
  • Consumer 退出 Group
  • 分区数量变化

Kafka 会自动进行 Rebalance。

  • Rebalance 会暂停消费 -> 需要避免频繁触发
  • (常用心跳、SessionTimeout 调优)

12. KRaft(最新架构)— Kafka 去掉 ZooKeeper

Kafka 3.3 后进入生产可用阶段。

变化:

模式 元数据存储 是否依赖 ZK
旧架构 Zookeeper
新架构 KRaft Kafka 内置元数据日志

KRaft 的好处:

  • 无需单独部署 ZK
  • 启动速度更快
  • 元数据一致性更强
  • 架构更简单,未来主流

KRaft 的组件:

  • Controller Quorum(多数派选举)
  • Broker(共享元数据日志)

13. Kafka 高性能核心原理总结(最关键 7 点)

  1. 顺序写磁盘(commit log)
  2. 零拷贝(sendfile)
  3. PageCache(利用 OS 缓存)
  4. 分区(Partition)并行写入
  5. 批处理(Batch)+ 压缩
  6. 副本异步复制(保证吞吐)
  7. 消费者端低开销 offset 管理

这些特性让 Kafka 轻松达到百万级吞吐。

14. Kafka 高可用核心机制总结

  • 副本(Replica)
  • ISR 同步集
  • Leader 选举
  • Controller 管理
  • 消费者 Group 冗余

Kafka 的高可用保障来自:

“分布式 + 多副本 + 自动选举 + 元数据一致性”

15. 一图总结 Kafka 底层工作原理(文字版示意)

                +------------------------+
Producer -----> |   Leader Partition    | ----> Consumer
                |  (Commit Log + Index) |
                +-----------+------------+
                            |
                    Replication (ISR)
                            |
                         Followers

📌 最终总结(最关键 15 条)

  1. Kafka 的底层完全基于追加写日志(commit log)
  2. Partition 是 Kafka 高吞吐的本质
  3. 分区内有序,分区间无序
  4. 多副本提高可用性而不是吞吐
  5. ISR 保证强一致(acks=all)
  6. Producer -> Leader 写入
  7. Follower 异步同步 Leader
  8. Consumer 只读 Leader(默认)
  9. Zero-copy 提升消费速度
  10. Offset 是 Consumer 的进度
  11. Rebalance 会暂停消费
  12. Controller 管理元数据和选举
  13. Kafka 通过批处理和压缩提升效率
  14. 磁盘顺序写 = 万兆吞吐
  15. KRaft 架构正在成为未来主流