为什么Kafka这么快(Kafka高吞吐、高性能)

文章目录

Kafka是分布式消息系统,需要处理海量的消息,Kafka的设计是把所有的消息都写入速度低容量大的硬盘,以此来换取更强的存储能力,但实际上,使用硬盘并没有带来过多的性能损失。kafka主要使用了以下几个方式实现了超高的吞吐率,Kafka是一个号称能用普通的PC机也能处理超千万亿的消息吞吐量的实时消息流处理平台。

问什么 Kafka 可以这么快?

发送端、存储端、消费端

发送端:异步发送+多分区并行+消息批量发送

存储端:零拷贝技术+磁盘顺序写入+稀疏索引+分区和副本+页缓存

消费端:消费者群组+并行消费+批量拉取

消息发送端

异步发送+多分区并行+消息批量发送

1.异步发送:生产者可以异步发送消息,不必等待每个消息的确认,这大大提高了消息发送的效率。

2.多分区并行:通过将数据分布在不同的分区(partitions)中,生产者可以并行发送消息,从而提高吞吐量。

3.数据压缩+消息批量发送,节省网络IO开销

消息存储

零拷贝技术+磁盘顺序写入+稀疏索引+分区和副本+页缓存

1.零拷贝机制

零拷贝技术:karka使用零拷贝技术来避免了数据的拷贝操作,降低了内存和cpu的使用率,提高了系统的性能。

零烤贝,首先要了解操作系统的o流程,因为有内核态和用户态的区别,为了保证安全性和缓存。

操作系统的虚拟内存分成两部分,一部分是内核空间,一部分是用户空间。这样就可以避免用户进程直接操作内核,保证内核安全。如图所示:

正常情况下,如果用户要从磁盘读取数据,必须先把数据从磁盘拷贝到内核缓冲区,然后在从内核缓冲区到用户缓冲区,最后才能返回给用户。

在Linux操作系统里面提供了一个sendfile函数,可以实现"零拷贝"。意思就是不需要经过用户缓冲区,可以直接把数据拷贝到网卡。

而Kafka中文件传输最终调用的是Java NIO 库里的 transferTo 方法,实际上最后就会使用到Linux sendfile() 系统调用函数。零拷贝技术可以大大地提升文件传输的性能。

2.磁盘顺序读写

磁盘顺序写入:kark把消息存储在磁盘上,且以顺序的方式写入数据。顶序写入比随机写入速度快很多,因

为它减少了磁头寻道时间,避免了随机读写带来的性能损耗,提高了磁盘的使用效率。

3.稀疏索引

Kafka的索引并不是每一条消息都会建立索引,而是一种稀疏索引

也就是说,Kafka插入一批消息才会产生一条索引记录。后续利用二分查找,可以大大提高检索效率。

稀疏索引:kafka存储消息是通过分段的日志文件,每个分段都有自己的索引文件,这些索引文件中的条目不

是对分段中的每条消息都建立索引,而是每隔一定数量的消息建立一个索引点,这就构成了稀疏索引,稀疏索

引减少了索引大小,使得加载到内存中的索引更小,提高了查找特定消息的效率

4.批量文件压缩

Kafka默认不会删除数据,它会把所有的消息都变成一个批量的文件。如图所示,它会把相同的Key合并为最后一个Value。这样对消息进行合理的批量压缩,可以减少网络IO损耗。

4.页缓存

kak将其数据存储在磁盘中,但在访问数据时,它会先将数据加载到操作系统的页缓存中,并在页缓存中保留一份副本,从而实现快速的数据访问。

页缓存:kaka将其数据存储在磁盘中,但在访问数据时,它会先将数据加载到操作系统的页缓存中,并在页缓存中保留一份副本,从而实现快速的数据访问。

这个是磁盘的构造。磁盘的盘片不停地旋转,磁头会在磁盘表面画出一个圆形轨迹,这个就叫磁道。从内到位半径不同有很多磁道。然后又用半径线,把磁道分割成了扇区(两根射线之内的扇区组成扇面)。如果要读写数据,必须找到数据对应的扇区,这个过程就叫寻址。

如果读写的多条数据在磁盘上是分散的,寻址会很耗时,这叫随机I/O。

如果读写的数据在磁盘上是集中的,不需要重复寻址的过程,这叫顺序I/O。

而Kafka的Message是不断追加到本地磁盘文件末尾的,而不是随机的写入,这使得Kafka写入吞吐量得到了显著提升。

在一定条件下测试,磁盘的顺序读写可以达到53.2M每秒,比内存的随机读写还要快。

5.分区和副本

kaka采用分区和副本的机制,可以将数据分散到多个节点上进行处理,从而实现了分布式的但

高可用性和负载均衡。

6.分段存储的好处

1、读取效率高

2、方便消息清理,仅删除,无修改

消息消费

1,消费者群组:通过消费者群组可以实现消息的负载均衡和容错处理。

2,并行消费:不同的消费者可以独立地消费不同的分区,实现消费的并行处理。

3,批量拉取:kak支持批量拉取消息,可以一次性拉取多个消息进行消费。减少网络消耗,提升性能

相关推荐
Francek Chen2 小时前
【大数据技术基础 | 实验十二】Hive实验:Hive分区
大数据·数据仓库·hive·hadoop·分布式
陌小呆^O^8 小时前
Cmakelist.txt之Liunx-rabbitmq
分布式·rabbitmq
斯普信专业组10 小时前
深度解析FastDFS:构建高效分布式文件存储的实战指南(上)
分布式·fastdfs
jikuaidi6yuan11 小时前
鸿蒙系统(HarmonyOS)分布式任务调度
分布式·华为·harmonyos
BestandW1shEs11 小时前
彻底理解消息队列的作用及如何选择
java·kafka·rabbitmq·rocketmq
天冬忘忧12 小时前
Kafka 生产者全面解析:从基础原理到高级实践
大数据·分布式·kafka
天冬忘忧13 小时前
Kafka 数据倾斜:原因、影响与解决方案
分布式·kafka
隔着天花板看星星13 小时前
Kafka-Consumer理论知识
大数据·分布式·中间件·kafka
holywangle13 小时前
解决Flink读取kafka主题数据无报错无数据打印的重大发现(问题已解决)
大数据·flink·kafka