Kafka性能强于RabbitMQ的原因
目錄
一、Kafka VS RabbitMQ? ?
1、衡量指標
2、結論
二、Kafak的高吞吐和低延遲是怎么實現的?
1.頁緩存技術+磁盤順序寫
??? ?2.零拷貝技術
三、關于頁緩存、磁盤順序寫、Socket緩存
1、頁緩存
2、磁盤順序寫
3、Socket緩存
一、Kafka VS RabbitMQ? ?
1、衡量指標
檢驗一款消息隊列的核心性能指標是?系統吞吐量?和?系統延遲?。
- 系統吞吐量:測量隊列在硬件(特別是磁盤和 CPU)使用方面的效率。
- 系統延遲:測量每個系統傳遞實時消息的差別,這是實時任務關鍵型應用程序以及微服務架構的核心要求。
2、結論
吞吐量: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緩存,大大提升了數據讀取性能。
參考文章:為什么Kafka性能強于RabbitMQ
三、關于頁緩存、磁盤順序寫、Socket緩存
1、頁緩存
?
2、磁盤順序寫
?
3、Socket緩存
?
?
?
?
總結
以上是生活随笔為你收集整理的Kafka性能强于RabbitMQ的原因的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Kafka—简明教程
- 下一篇: RabbitMQ—为什么使用信道chan