Kafka - 之kafka为什么这么快(页缓存、零拷贝、顺序写磁盘)!

Kafka的高性能主要源于页缓存、零拷贝和顺序写磁盘技术。页缓存减少了磁盘读取次数,通过内核缓存提升效率;零拷贝技术避免了数据在用户态和内核态间的多次拷贝,提高读写速度;顺序写磁盘则利用磁盘特性,通过连续写入提高磁盘I/O性能。这些机制共同确保了Kafka的高吞吐量。
摘要由CSDN通过智能技术生成

Kafka - 之kafka为什么这么快(页缓存、零拷贝、顺序写磁盘)!

kafka为什么这么快,主要是得益于以下几点

用户应用与磁盘之间文件之间的读写可以大致分为以下几层分工

###############################
 用户层(服务端应用)
 用户态缓存
###############################
 内核层(操作系统内核)
 页缓存  socket缓存
###############################
    磁盘文件 网卡

1 什么是页缓存

页缓存是Linux内核中的一种重要的高速磁盘缓存,是计算机随机存取器RAM(内核缓存)中的一块区域,主要是负责用户空间磁盘文件之间的高效读写。

具体的整个读写流程如下:

# DMA direct memory access:直接存储器访问,也就是直接访问RAM,不需要依赖CPU的负载
# CPU :中央核心处理器,主要用于计算,如果用于拷贝就太浪费资源
磁盘文件 ==DMAcopy=> 页缓存 ==CPUcopy=> 用户空间缓存 ==CPUcopy=> Socket缓存 ==DMAcopy=>> 网卡

页缓存减少了连续读写磁盘文件的次数,操作系统自动控制文件块的缓存与回收生命周期,用访问RAM的缓存代替访问磁盘区域的机制,增强查询效率。

2 什么是零拷贝?

零拷贝是一种为了解决数据从内核缓存用户缓存的CPU拷贝产生的性能消耗的技术。

原理:当数据从磁盘经过DMA copy到页缓存(内核缓存)后,为了减少CPU拷贝的性能损耗,操作系统会将该内核缓存与用户层进行共享,减少一次CPU copy过程,同时用户层的读写也会直接访问该共享存储,本身由用户层到Socket缓存的数据拷贝过程也变成了从 内核到内核的CPU拷贝过程,更加的快速。

具体的流程如下:

磁盘文件 ==DMAcopy=> 【页缓存并共享作为用户空间缓存】 ==CPUcopy=> Socket缓存 ==DMAcopy=>> 网卡

很明显了拷贝操作都是在内核完成,非常高效。

3 什么是顺序写磁盘

随机写磁盘需要多次寻找磁盘地址,这个过程需要频繁的切换磁道,所以过程比较慢。

顺序写磁盘就是在一个磁道连续的写入,数据都排在一起,分布在连续的磁盘扇区,主需要一次寻址就能找到对应的数据,而kafka本身的数据是不需要删除数据的,是已追加的方式写到磁盘,所以这样就能保证磁盘数据连续紧凑,同时kafka是以segment log flie进行分段存储的,每次访问磁盘文件的时候只需要寻址最后一个segment file的磁盘空间,所以也能够保证写入和读取的效率。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值