Kafka 零拷贝总结

今天看了些视频 感觉kafka 零拷贝和之前自己理解的有些出入

所以来总结一下

先说如果没有零拷贝 数据是怎么从磁盘发送到网卡的?

操作系统分内核态与用户态,从磁盘io读取数据这个操作要通过系统调用 从用户态切换到内核态进行,

所以

1.read()命令 发起系统调用 DMA把数据从磁盘拷贝到内核态的内核缓冲区 然后cpu把数据从内核态拷贝到用户态

2.write()命令 cpu把数据从用户态拷贝到内核态的socket缓冲区,然后用dma发送给网卡

这个过程中 一共发生两次系统调用 四次拷贝

kafka的零拷贝有mmap 和 sendfile两种方式

**mmap:**相当于把内核空间的缓冲区映射到用户空间 拷贝的只是这种映射关系,并不真的拷贝数据

使用mmap获取映射,再用send 发送数据(从内核缓冲区到socket缓冲区)

整个过程发送 两次系统调用和两次拷贝 只发生一次cpu拷贝

sendfile 真正的零拷贝,只有一次系统调用 共用一个内核缓冲区,减少了内核缓冲区到socket缓冲区的拷贝,整个过程只有一次系统调用和一次拷贝 且完全消除cpu拷贝(若是此时数据在pagecache里 甚至可以再减少一次磁盘DMA拷贝的过程)

是最快的方式

那为什么rabbitmq不也使用sendfile的拷贝方式 而是选择了mmap呢?

rabbitmq 有一些功能如死信队列的投递要用到时间发送的内容

而sendfile只会返回成功发送的字节数 所以rmq只能用mmap

相关推荐
8Qi813 小时前
DDD架构演进
java·分布式·mvc·ddd
方方洛13 小时前
ray教程-23-附录C-术语表
人工智能·分布式·机器学习
皮皮林55114 小时前
Kafka 怎么保证消费只消费一次的?
kafka
茶海棠19 小时前
Hadoop+zookeeper+HBase+Kafka集群搭建全流程
hadoop·zookeeper·kafka·hbase
海棠Flower未眠21 小时前
下单请求处理流程:商品维度分布式锁与 Redis 预扣库存
redis·分布式·junit
罗四强1 天前
第10篇:打包上架:签名、打包 HAP、发布到华为应用市场
分布式·操作系统·harmonyos·arkts·鸿蒙系统
秋饼1 天前
Redis 全面解析:从数据结构到主从/哨兵/集群、分布式锁与面试高频考点,代码到原理一次讲透
数据库·redis·分布式·面试·后端开发
二月夜1 天前
Redis 高频面试题全解:缓存三大问题、大 key 治理与分布式锁之争(2026 招聘 JD 真题复盘)
redis·分布式·后端·缓存
后台模板学习1 天前
Kafka 与 RabbitMQ 在用户认证与权限管理场景
kafka·rabbitmq·linq
樱花落木兰1 天前
Redis 消息队列的可靠性演进:从 List、Pub/Sub 到 Stream 消费者组,以及 8.x 版本改变了什么
java·开发语言·经验分享·redis·分布式·python·软件工程