亲宝软件园·资讯

展开

为什么Kafka性能强于RabbitMQ

人气:0

一、Kafka VS RabbitMQ   

     检验一款消息队列的核心性能指标是 系统吞吐量 和 系统延迟

  • 吞吐量测试测量队列在硬件(特别是磁盘和 CPU)使用方面的效率。
  • 延迟测试测量每个系统传递实时消息的差别,这是实时任务关键型应用程序以及微服务架构的核心要求。

结论:

吞吐量:Kafka 在三个系统中的吞吐量最高,是 RabbitMQ 的 15 倍,Pulsar 的 2 倍。

系统延迟:Kafka 在较高的吞吐量下提供了最低的延迟,同时还提供了强大的持久性高可用性。RabbitMQ 可以实现比 Kafka 更低的端到端延迟(在吞吐量低很多的情况下)

二、Kafak的高吞吐和低延迟是怎么实现的?

  1. 页缓存技术+磁盘顺序写

       Kafka的消息数据是写在硬盘上的,保证了消息数据的可靠性,但写硬盘还能保证几十万条/秒的消息处理速度,是怎么做到的?答案是基于操作系统的页缓存和磁盘顺序写来实现的。

        页缓存Page Cache—操作系统自己管理的内存缓存(os cache)。Kafka在写入消息时是直接写入页缓存,然后由操作系统决定什么时候把页缓存里的数据刷入磁盘文件中。这样一来,消息写入性能就变成了写内存,不是在写磁盘,请看下图。

                                  

         常规的磁盘写入都是随机写,随便找到文件的某个位置来写数据,这样的性能非常差,但是追加文件末尾按照顺序的方式来写数据的话,其写入性能跟写内存的性能都相差无几的。Kafak就是采用顺序写的方案,再加上页缓存的应用,才能做到在普通服务器上每秒写入几十万条消息,实现了数据写入的超高性能 。

     2.零拷贝技术

        解决了写入问题,那消息读取呢?频繁的从磁盘读数据然后发给消费者,性能又是如何保证的?Kafka为了解决这个问题,在读数据的时候是引入零拷贝技术。

先看下图是常规的硬盘读写流程,操作系统读取硬盘数据后放在OS Cache,然后需要拷贝一次到Kafka进程,然后Kafka再将数据拷贝到Socket缓存才能发送到网卡,这样流程的性能当然没有保障。

       

 再看下图, Kafka的设计为直接将操作系统OS Cache中的数据发送到网卡,跳过了两次拷贝数据的步骤,Socket缓存中仅仅会拷贝一个描述符过去,不会拷贝数据到Socket缓存,大大提升了数据读取性能。

加载全部内容

相关教程
猜你喜欢
用户评论