Kafka为什么这么快? 为何卡夫卡如此迅猛?(2)
Kafka为什么这么快

如图,如果采用传统的 IO 流程,先读取网络 IO,再写入磁盘 IO,实际需要将数据 Copy 四次。

- 第一次:读取磁盘文件到操作系统内核缓冲区;
- 第二次:将内核缓冲区的数据,copy 到应用程序的 buffer;
- 第三步:将应用程序 buffer 中的数据,copy 到 socket 网络发送缓冲区;
- 第四次:将 socket buffer 的数据,copy 到网卡,由网卡进行网络传输。
★
同学:啊,操作系统这么傻吗?copy 来 copy 去的。
并不是操作系统傻,操作系统的设计就是每个应用程序都有自己的用户内存,用户内存和内核内存隔离,这是为了程序和系统安全考虑,否则的话每个应用程序内存满天飞,随意读写那还得了。
不过,还有零拷贝技术,英文——Zero-Copy。零拷贝就是尽量去减少上面数据的拷贝次数,从而减少拷贝的 CPU 开销,减少用户态内核态的上下文切换次数,从而优化数据传输的性能。
常见的零拷贝思路主要有三种:
- 直接 I/O:数据直接跨过内核,在用户地址空间与 I/O 设备之间传递,内核只是进行必要的虚拟存储配置等辅助工作;
- 避免内核和用户空间之间的数据拷贝:当应用程序不需要对数据进行访问时,则可以避免将数据从内核空间拷贝到用户空间;
- 写时复制:数据不需要提前拷贝,而是当需要修改的时候再进行部分拷贝。
Kafka 使用到了mmap和sendfile的方式来实现零拷贝。分别对应 Java 的MappedByteBuffer和FileChannel.transferTo。
使用 Java NIO 实现零拷贝,如下:
FileChannel.transferTo()
在此模型下,上下文切换的数量减少到一个。
具体而言,transferTo()方法指示块设备通过 DMA 引擎将数据读取到读取缓冲区中。
然后,将该缓冲区复制到另一个内核缓冲区以暂存到套接字。
最后,套接字缓冲区通过 DMA 复制到 NIC 缓冲区。
相关阅读
-
创建网站需要多少钱 建网站需要的费用
文章摘要:创建网站需要多少钱和建网站需要的费用的相关经验,接下来IT袋小编就来介绍。 随着现代社会的发展,制作网站的门槛是越来越低,现在有开源的程序,会打字就可以建设一个网
-
Spring AOP/IOC实现原理
正文核心介绍:Spring的内容,一起跟随小编看看吧! AOP 什么是AOP 通俗的讲就是当你想要实现对象增强,就可以使用AOP。 不然的话还需要自己创建代理,AOP就是为了解决 非业务代码抽取 的
-
域名和ip地址是如何对映的 域名与IP地址的映射机制解析
本文摘要:域名和ip地址是如何对映的的IT小经验,下面小编为您详细解答 主要通过DNS域名解析来完成的。 域名解析的工作流程: 客户端首先会发出一个 DNS 请求,问 www.server.com 的 IP 是啥,并
-
动态网站开发与设计 html网页制作动态效果
小编为你讲解动态网站开发与设计和html网页制作动态效果的相关经验,一起跟随小编看看吧! 细节部分如页面的访问速度,客户的使用反馈和交流,内容的更新等都对于用户来说能够起到不小


