为什么Kafka快
有许多设计决策促成了Kafka的性能。本文将重点关注两个设计决策。我们认为这两个决策的影响最大。

- 第一个是Kafka依赖于顺序I/O。
- 第二个设计选择,使Kafka具备性能优势的是其对效率的关注:zero copy原则。
该图示说明了数据在生产者和消费者之间的传输方式,以及zero copy的含义。
- 步骤1.1 - 1.3:生产者将数据写入磁盘 - 步骤2:消费者在没有zero copy的情况下读取数据
2.1 数据从磁盘加载到操作系统缓存
2.2 数据从操作系统缓存复制到Kafka应用程序
2.3 Kafka应用程序将数据复制到套接字缓冲区
2.4 数据从套接字缓冲区复制到网络卡
2.5 网络卡将数据发送给消费者
2.5 网络卡将数据发送给消费者
- 第3步:消费者以零拷贝方式读取数据
3.1:数据从磁盘加载到操作系统缓存中
3.2 操作系统缓存通过 sendfile() 命令直接将数据复制到网络卡
3.3 网络卡将数据发送给消费者
零拷贝是一种优化方法,用于减少应用程序上下文和内核上下文之间多次数据复制。