概述
Kafka高性能高吞吐的原因/为什么这么快?
-
磁盘顺序读写
-
传统的磁盘读写是随机读写,导致数据是分散开的,不在一起,不仅将预读浪费掉了,还需要进行多次的寻道和旋转延迟,从而浪费过多的时间。
-
而Kafka采取的是顺序读写,磁盘会预读,预读就是从读取的起始地址连续读取多个页面,时间主要都花费在了传输上,从而使得磁盘的处理效率更接近于内存。
-
比起内存,使用磁盘的好处更体现在容量上,从而保证消息的堆积。
-
-
零拷贝
- 传统的数据赋值是:
- 先将磁盘文件中的数据先读取到内核缓冲区,
- 再拷贝到用户缓冲区,
- 再将用户缓冲区的数据拷贝到socket的发送缓冲区,
- 然后再发送到网卡进行传输;
- 零拷贝:
- 直接从磁盘文件中读取到内核缓冲区,再由内核缓冲区直接给到网卡,再返回给消费者进程,从而避免了传统数据复制过程中CPU将数据在内核缓冲区和用户缓冲区的拷贝流程
- 传统的数据赋值是:
-
分区分段加索引
- partition由多个大小相等的segment file组成,每次进行的文件操作也是直接操作的segment file。为了进一步查询优化,Kafka默认为分段后的数据文件建立了以.index结尾的索引文件。这种分区分段+索引的设计不仅提升了数据读取的效率,同时也提高了数据操作的并行度(类似于分段锁)。
-
批量压缩,批量读写
- 多条消息一起压缩,从而降低带宽。
-
直接操作page cache(页高速缓冲存储器),而不是JVM,避免了对象的创建和GC耗时,因此读写效率更高
最后
以上就是精明钢笔为你收集整理的Kafka高性能高吞吐的原因/为什么这么快?的全部内容,希望文章能够帮你解决Kafka高性能高吞吐的原因/为什么这么快?所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复