493 字
2 分钟
Kafka 架构深度剖析:为什么它能处理万亿级数据?

吞吐量之王#

在 LinkedIn,Kafka 每天处理数万亿条消息。 它的设计哲学与传统 MQ(如 RabbitMQ)截然不同。 传统 MQ 试图做“复杂的路由”,而 Kafka 试图做“极致的日志存储”。

秘诀一:磁盘顺序写 (Sequential Write)#

大家都认为磁盘慢,内存快。 但在 顺序写 模式下,现代 HDD/SSD 的速度可以达到 100MB/s甚至几GB/s,这比 随机写内存 还要快!

Kafka 把消息追加到 Partition 的末尾(Log Append)。 它不需要在磁盘上跳来跳去寻找位置。 这就是为什么 Kafka 即使积压了 TB 级数据,写入速度依然不减。

秘诀二:零拷贝 (Zero Copy)#

当消费者 (Consumer) 来拉取数据时,传统的流程是:

  1. 操作系统把数据从磁盘读到内核 Buffer。
  2. 应用程序把数据从内核 Buffer 拷到用户态 Buffer。
  3. 应用程序把数据从用户态 Buffer 拷回内核 Socket Buffer。
  4. 操作系统把数据发送到网卡。

4 次拷贝,2 次上下文切换。太累了。

Kafka 使用 sendfile() 系统调用(Java 中的 FileChannel.transferTo())。 数据直接从 Page Cache 传输到 Socket Buffer(或者网卡)。 CPU 全程不参与数据搬运

秘诀三:Page Cache 缓存#

Kafka 不在 JVM 堆内缓存数据(避免 GC 压力)。 它依赖操作系统的 Page Cache。 只要内存够大,热数据就在内存里。即便 Kafka 重启,Page Cache 依然在。

架构设计#

  1. Partition (分区):扩展性的单位。一个 Topic 切成多个 Partition,分布在不同 Broker 上,实现并行读写。
  2. Consumer Group (消费组):广播与单播的结合。组内负载均衡,组间发布订阅。
  3. ISR (In-Sync Replicas):高可用的保障。只有 ISR 里的副本都写成功了,消息才算 Committed。

总结#

Kafka 的成功在于它利用了 OS 的底层特性,而不是试图对抗它。 它是大数据领域的“管道”,简单、粗暴、有效。

Kafka 架构深度剖析:为什么它能处理万亿级数据?
https://www.oferry.com/posts/a62/
作者
晨平安
发布于
2026-02-10
许可协议
CC BY-NC-SA 4.0
封面
示例歌曲
示例艺术家
封面
示例歌曲
示例艺术家
0:00 / 0:00