参考文章: 图解Kafka的零拷贝技术
kafka高吞吐量的原因
1、磁盘顺序写: 磁盘的顺序IO速度远大于固态硬盘随机写操作
2、消息压缩: 数据压缩减少网络传输
3、分批发送: kafka允许批量发送消息
4、分区: 多分区,并行消费
5、零拷贝机制
今天主要讲讲零拷贝机制与在kafka中的应用
传统的文件拷贝机制
传统的文件拷贝,从磁盘上再到网卡要经过四步
1、操作系统从磁盘将数据读取到内核空间的页缓存
2、应用程序将数据从内核空间读入用户空间缓存区
3、应用程序将读到的数据写回到socket缓冲区
4、操作系统将数据从socket缓冲区复制到网卡接口,进行数据发送
DMA技术(Direct Memory Access)
一种可让某些硬件子系统直接访问系统主内存,不依赖CPU的计算机系统功能。
- 减少了用户态与内核态的转换,大大减少了CPU的工作
- 数据直接复制一次就行,减少了复制的IO操作
kafka中的应用
通常情况下,kafka会有多个订阅者,生产者发布的消息会被不同消费者多次消费。零拷贝机制将磁盘文件数据复制到页缓存,然后直接发送到网络中(不同消费者可以用一个也缓存)
例如: 10个消费者,传统复制 4*10 = 40次,零拷贝机制,需要11次,一次从磁盘复制到页缓存,10次表示10个消费者各自读取一次。