Skip to content

为什么Kafka快

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

  1. 第一个是Kafka依赖于顺序I/O。
  2. 第二个设计选择,使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 网络卡将数据发送给消费者

零拷贝是一种优化方法,用于减少应用程序上下文和内核上下文之间多次数据复制。