本文最后更新于 2 分钟前,文中所描述的信息可能已发生改变。
常见问题
- Kafka 的基本原理
Kafka 的应用场景
Kafka 的延迟队列是怎么实现的
Kafka 是如何实现消息有序性的
零拷贝机制
零拷贝是指应用程序在需要把内核区域数据转移到另外一块内核区域时,不需要经过先复制到用户空间,在转移到目标内核区域,而是直接实现转移的快捷操作。零拷贝不等于没有拷贝,而是减少用户态与内核态之间的数据拷贝。
实现方式
- ·
mmap + write:把文件映射到用户空间,减少一次 CPU 拷贝。 sendfile:直接在内核态完成文件描述符之间的数据传输(文件 → socket),避免用户态拷贝。splice / tee:在内核缓冲区之间传输数据,支持管道与 socket 间高效传输。
Kafka 中的使用
Kafka 采用 Linux 的 sendfile 系统调用 来实现零拷贝:
- 消费者请求消息时,Broker 不需要把磁盘上的消息先拷贝到用户态缓冲区。
- Kafka 直接调用 sendfile,把数据从 page cache(内核页缓存) 直接发送到 socket 缓冲区。
- 网卡通过 DMA 把数据发给消费者。