Kafka 的高吞吐量(High Throughput)在很大程度上归功于其对操作系统底层特性的极致利用,其中零拷贝(Zero Copy)技术是核心之一。 简单来说,Kafka 使用零拷贝技术是为了在网络传输数据时,避免将数据从内核空间(Kernel Space)拷贝到用户空间(User Space),再拷贝回内核空间,从而减少 CPU 的上下文切换和内存拷贝次数。 以下是详细的原理和实现方式: --- 1. 传统的数据传输方式(低效) 在没有零拷贝技术时,如果 Kafka 要把磁盘上的消息发送给消费者,通常需要经过以下 4 次拷贝和 4 次上下文切换: 1. DMA 拷贝:磁盘 -> 内核读取缓冲区(Read Buffer / Page Cache)。 2. CPU 拷贝:内核读取缓冲区 -> 用户空间缓冲区(Application Buffer)。(此时发生了上下文切换:内核态 -> 用户态) 3. CPU 拷贝:用户空间缓冲区 -> 内核 Socket 缓冲区。(此时发生了上下文切换:用户态 -> 内核态) 4. DMA 拷贝:内核 Socket 缓冲区 -> 网卡(NIC...