1 简介
零拷贝是指将数据直接从磁盘文件复制到网卡,而不需要经由应用之手。
零拷贝大大提高了应用程序的性能,减少了内核和用户模式之间的上下文切换。
对Linux操作系统而言,零拷贝技术依赖于底层的sendfile()方法实现,对于Java语言,FileChannel.transferTo()方法的底层实现就是sendfile()方法。
不使用零拷贝的话,图示如下:
1)磁盘数据到buffer
2)buffer到应用
3)应用再到buffer
4)buffer到客户端
如果采用零拷贝,2和3就可以省略了
2 kafka消息
kafka中,持久化的消息不需要交给kafka处理,可以直接返回给consumer。所以可以零拷贝
3 kafka持久化结构
先把消息存到缓存,再持久化到磁盘
4 kafka的零拷贝
由于kafka消息是没有发生变化的,所以从cache找到消息后,不需要返回给kafka处理,可以直接返回给consumer。
整个过程中,找到消息后,没有返给kafka,直接交给内核发到consumer,减少了把消息从cache发给kafka,再从kafka到内核的过程。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?