kafka零拷贝总结
在实际应用中,如果我们需要把磁盘中的内容发送到远程服务器上,那么需要经过一下几个拷贝的过程。
第一个从磁盘中去读取目标文件的内容去拷贝到内核缓冲区,第二个cpu控制器把内核缓冲区的数据拷贝到用户空间的缓冲区中,第三个在应用程序中调用write()方法把用户空间缓冲区的数据拷贝到内核空间的socketBuffer中,第四个把在内核模式下的socket buffer中的数据复制到网卡缓冲区,叫NIC Buffer 最后,网卡缓冲区再把数据传输到目标服务器上,在这整个过程中,数据从磁盘最终发送出去要经历四次拷贝,这四次拷贝中有两次是可以省略的。第一,从内核空间拷贝到用户空间。第二,从用户空间再次拷贝到内核空间。除此之外,由于用户空间和内存空间的切换,会带来cpu的上下文切换,对于cpu的性能也会造成影响。
而所谓的零拷贝就是把这两次多余的拷贝忽略掉,应用程序可以直接把磁盘中的数据从内核中直接传输到Socket中去,而不需要再次经过应用程序所在的用户空间零拷贝通过DirectMemory Access技术把文件内容复制到内核空间中的ReadBuffer,接着把包含数据长度和位置信息的文件描述符加载到SocketBuffer中,DMA引擎可以直接把数据从内核空间传递到网卡设备,在这个流程中数据只经历了两次拷贝就把数据发送到了网卡当中,并且减少了两次cpu的上下文切换对于效率是有非常大的提高,所以,所谓的零拷贝并不是完全没有数据拷贝只是相对用用户空间来说,不需要再进行数据的拷贝对于前面说的整个流程来说,零拷贝只是减少了不必要的拷贝次数而已。
那么,在程序中如何实现零拷贝呢,在linux系统中,零拷贝依赖于底层sendfile()方法去实现的,而在Java中FileChannal.transferTo()方法的底层实现就是sendfile()方法除此之外还有一个叫mmap的文件映射机制,他的原理是把磁盘文件映射到内存,用户通过修改内存就可以修改磁盘文件,使用这种方式,可以获得很大的io提升,省去了用户空间到内核空间的复制开销。
kafka零拷贝总结相关推荐
- 通俗易懂的Kafka零拷贝机制
Kafka之所以那么快,其中一个很大的原因就是零拷贝(Zero-copy)技术,零拷贝不是kafka的专利,而是操作系统的升级,又比如Netty,也用到了零拷贝.下面我就画图讲解零拷贝,如果对你有帮助 ...
- 【kafka】kafka 零拷贝 技术
文章目录 1.概述 M.参考 1.概述 原来 8 张图,就可以搞懂「零拷贝」了 非0拷贝的样子 0拷贝的样子
- Java 两种zero-copy零拷贝技术mmap和sendfile的介绍
详细介绍了两种zero-copy零拷贝技术mmap和sendfile的概念和基本原理. 文章目录 1 标准IO 2 零拷贝 2.1 sendfile调用 2.1 mmap调用 2.2 MQ中的应用 1 ...
- Netty、Kafka中的零拷贝技术到底有多牛?
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 来源:rrd.me/ggFBd 零拷贝,从字面意思理解就是数据不需 ...
- 深入探秘 Netty、Kafka 中的零拷贝技术!
作者:ksfzhaohui 原文:juejin.im/post/5cad6f1ef265da039f0ef5df 零拷贝,从字面意思理解就是数据不需要来回的拷贝,大大提升了系统的性能.我们也经常在 J ...
- Kafka:Zero-Copy零拷贝
1. 前言 前一段时间研究了大规模日志流高吞吐并行存储,通过深入研究Kafka的底层存储机制.我们发现Kafka的Zero-Copy零拷贝技术采用的是Java底层FileTransferTo方法,后期 ...
- Kafka和RocketMQ底层存储:零拷贝技术
零拷本相关 <[转]零拷贝的实现原理> <[转]零拷贝的实现原理> <搞懂Linux零拷贝,DMA> <通过零拷贝进行有效的数据传输(java.c)> ...
- 深入分析零拷贝的原理,彻底掌握Netty、Kafka、RocketMQ高效率读写的秘诀
文章目录 一.前言 二.纠正一些网络上流传的错误说法 2.1.错误说法一:零拷贝就是零复制或者零拷贝技术没有进行数据的复制操作,所以比较快. 2.2.错误说法二:DMA技术诞生后,零拷贝基于DMA,实 ...
- 零拷贝技术浅浅析【kafka实现百万级吞吐量基础】
家人们,这期的知识点可能会让你掉几根头发,为了尽可能让你理解,进入正题前我们先来看个栗子 给女朋友送礼物 如果,我是说如果啊,你有一个女朋友(没有的不要灰心,认真看完文章可以找博主领取) 情人节来了, ...
最新文章
- Asp.net MVC生命周期
- springmvc 将post转换为delete,put
- Git的Patch功能
- RedOffice教你DIY环保小日历
- php读取客户机本地时间,PHP如何获取客户端时区以及准确显示所在地时间
- 用C语言实现解析简单配置文件的小工具
- 短视频追剧的末日来了?
- 根据输入时间判断年龄是否在18~68周岁之间
- 服务器、网站被攻击了怎么办?
- Android客户端通过TCP接收服务器端发送的数据
- 在vue中使用turn.js
- Cardboard -VR全景浏览
- 2022-2028年中国工业机器人行业产销需求预测与转型升级分析报告
- 两个电阻的并联与串联
- python三国演义人物出场统计ppt_Python统计三国演义主要人物出场次数
- Python爬虫问题汇总(持续更新)
- 多用户php商城源码,bymall B2B2C多用户开源商城系统 php版 v1.0.4
- 工业相机的传感器靶面大小
- 使用OpenCV调整图像大小
- 学习SpringSecurity这一篇就够了