为什么 Kafka 很快?
2011 年初,LinkedIn 开源了 Kafka,这是一个分布式事件流平台。它以作家弗朗茨-卡夫卡(Franz Kafka)的名字命名。顾名思义,Kafka 是为写而优化的。它为处理实时数据馈送提供了一个高吞吐量、低延迟的平台,在互联网公司中得到广泛应用。
Kafka 通过顺序 I/O (Sequential I/O)和零拷贝 (Zero Copy)实现了低延迟的消息传递。许多其他消息平台通常也采用相同的技术。
我们用下图的数据传输过程来解释零拷贝。
步骤 1.1 - 1.3
生产者写入数据
步骤 2
消费者读取数据,不使用零拷贝技术
- 2.1: 数据从磁盘加载到操作系统缓存
- 2.2 数据从操作系统缓存复制到 Kafka进程
- 2.3 Kafka进程将数据复制到套接字缓冲区 (Socket Buffer)
- 2.4 数据从套接字缓冲区复制到网卡
- 2.5 网卡向用户发送数据
步骤 3
消费者使用零拷贝技术读取数据
- 3.1: 数据从磁盘加载到操作系统缓存
- 3.2 操作系统缓存通过 sendfile() 命令直接将数据复制到网卡
- 3.3 网卡向用户发送数据
零拷贝节省了应用程序和内核上下文之间多次数据拷贝。
这种方法可将时间缩短约 65% 。
如果你对细节感兴趣,欢迎留言告诉我。
【关注公众号:ByteByteGo】