【Kafka】Kafka为什么快?

Kafka之所以快的原因有三个:顺序读写、页缓存、零拷贝。

顺序读写

Kafka依赖磁盘来存储和缓存消息。
在我们的印象中,磁盘的读写速度会比内存的读写速度慢,但这是在随机读写场景下的比较。
实际上,磁盘的顺序读写能力不容小觑,有测试表明磁盘的顺序读写要比随机读写快将近3个数量级,并且比内存的随机读写也要快。
Kafka在设计时采用了文件追加的方式写入消息,即只能在日志尾部追加新的消息,并且不能修改已经写入的消息。

在这里插入图片描述

页缓存

为了优化读写性能,Kafka使用操作系统的页缓存,也就是操作系统自身的内存,而不是JVM内存。
这样的设计,避免了创建对象和GC的性能消耗。
页缓存是操作系统实现的一种主要的磁盘缓存技术,以此用来减少对磁盘 I/O 操作。具体来说,就是磁盘中的数据缓存到内存中,把对磁盘的访问变为对内存的访问。

零拷贝

所谓零拷贝是指直接将数据从磁盘文件复制到网卡设备中,而不经过应用程序。
零拷贝大大提高了应用程序的性能,减少了内核态和用户态的上下文切换。
传统的拷贝技术在整个文件发送过程中需要经过4次拷贝:

  1. 数据从磁盘拷贝到内核的缓冲区中;
  2. 将数据从内核缓冲区拷贝到用户的应用缓冲区;
  3. 数据从应用缓冲区拷贝回内核的socket缓冲区;
  4. 从socket缓冲区拷贝到网卡,进行网络传输;
    零拷贝技术则省去了中间的多次拷贝,将数据从磁盘文件发送到网卡设备中进行网络传输。

传统文件拷贝过程

零拷贝过程

–The End–

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值