Kafka为什么这么快?

kafka高效读写数据的原理

1)Kafka 本身是分布式集群,可以采用分区技术,并行度高

2)读数据采用稀疏索引,可以快速定位要消费的数据

  1. 按照二分法找到小于 offset 的 segment 的.log 和.index
  2. 用目标 offset 减去文件名中的 offset 得到消息在这个 segment 中的偏移量。
  3. 再次用二分法在 index 文件中找到对应的索引。
  4. 到 log 文件中,顺序查找,直到找到 offset 对应的消息。

3)顺序写磁盘

Kafka 的 producer 生产数据,要写入到 log 文件中,写的过程是一直追加到文件末端,为顺序写。官网有数据表明,同样的磁盘,顺序写能到 600M/s,而随机写只有 100K/s。这与磁盘的机械机构有关,顺序写之所以快,是因为其省去了大量磁头寻址的时间。

4)页缓存 + 零拷贝技术

零拷贝技术:减少用户态/内核态的切换次数以及CPU拷贝的次数

sendfile 和 mmap 是零拷贝的两种不同实现,在 kafka 中也对应两种不同场景。针对 producer 往 broker 上写入消息,使用的是 mmap,consumer 从 broker 上拉取数据,使用的是 sendfile。

producer 往 broker 发消息:对应消息文件从网卡-->磁盘。这个文件在写入过程中是会动态"变化"的,假设使用 sendfile 的方式就是直接把文件从网卡 copy 到 socket buffer 之后,然后直接落到磁盘,中间是【不能有变更操作的】,这显然不符合写入的要求。

再说 consumer 从 broker 拉消息:对应消息文件从磁盘-->网卡。这个过程中使用的是 sendfile。这个过程中【对消息这个文件是不需要有任何变更操作的】,将文件从磁盘 copy 到 readBuffer 之后,直接发送到网卡了,这中间没有经过 socketBuffer。

看一遍就理解:零拷贝原理详解 - 知乎

5)批量传输与压缩消息

相关推荐
m0_646429979 小时前
RabbitMQ 核心知识总结(生产实战版)
分布式·rabbitmq
DBA_G11 小时前
GBase 8c分布式数据库客户端工具 gsql
数据库·分布式
chunyublog11 小时前
Spark 词频统计练习
大数据·分布式·spark
ClouGence12 小时前
开源数据库管理工具 CloudDM 4.4.0 发布,新增 Kafka、SAP HANA 数据源
数据库·kafka
acrel713 小时前
高速公路分布式光伏并网电能质量与安全保护方案应用
分布式·安全
RobinXYuan13 小时前
【Kafka 源码手记】01 从消息队列到 Event Streaming
kafka·源码阅读
IT小小猪14 小时前
# Hadoop 3.3.6 完全分布式集群部署知识库
hadoop·分布式·eclipse
此时不提桶,更待何时15 小时前
06-24-B-RabbitMQ面试与生产事故实战
分布式·面试·rabbitmq
来福猿15 小时前
分布式锁 Redis 实现源码分析:SETNX、过期时间与可重入设计
数据库·redis·分布式
Pniubi1 天前
分布式锁分类讲解
分布式