Confluent官博:Kafka最牛队列,性能15倍于RabbitMQ!
“
容器、Kubernetes、DevOps、微服務、云原生,這些技術名詞的頻繁出現,預兆著新的互聯網技術時代的到來,大數據高并發將不再遙遠,而是大部分項目都必須面對的,消息隊列則是核心利器!成熟的消息隊列產品很多,該如何技術選型?下面是翻譯自Confluent 官方博客的消息隊列性能對比測試。
原文地址:https://www.confluent.io/blog/kafka-fastest-messaging-system/
”
文:Yiru-Chen ?
來源:DotNetdaily?
DotNetdaily
云硬件Kafka
性能測試
眾所周知Kafka快,究竟有多快,跟其他隊列相比又如何?這里選擇了Kafka、RabbitMQ 和Apache Pulsar進行測試,關注點是系統吞吐量 和系統延遲,因為它們是生產中事件流處理系統的核心性能指標。具體來說,吞吐量測試測量隊列在硬件(特別是磁盤和 CPU)使用方面的效率。延遲測試測量每個系統傳遞實時消息的差別,這是實時任務關鍵型應用程序以及微服務架構的核心要求。
最終結論:
吞吐量:Kafka 在三個系統中的吞吐量最高,是 RabbitMQ 的 15 倍,Pulsar 的 2 倍。
系統延遲:Kafka 在較高的吞吐量下提供了最低的延遲,同時還提供了強大的持久性和高可用性。RabbitMQ 可以實現比 Kafka 更低的端到端延遲,但只能在吞吐量低很多的情況下。
Kafak的高吞吐和低延遲是怎么實現的?Kafak有著極為優秀和出色的設計,一是頁緩存技術+磁盤順序寫,一是零拷貝技術!
DotNetdaily
頁緩存技術
磁盤順序寫
Kafka的消息數據是寫在硬盤上的,保證了消息數據的可靠性,但寫硬盤還能保證幾十萬條/秒的消息處理速度,是怎么做到的?答案是基于操作系統的頁緩存和磁盤順序寫來實現的。
頁緩存page cache,就是操作系統自己管理的內存緩存,也叫os cache。Kafka在寫入消息時,是直接寫入頁緩存,然后由操作系統決定什么時候把頁緩存里的數據刷入磁盤文件中。這樣一來,消息寫入性能就變成了寫內存,不是在寫磁盤,請看下圖。
常規的磁盤寫入都是隨機寫,隨便找到文件的某個位置來寫數據,這樣的性能非常差,但是追加文件末尾按照順序的方式來寫數據的話,其寫入性能跟寫內存的性能都相差無幾的。Kafak就是采用順序寫的方案,再加上頁緩存的應用,才能做到在普通服務器上每秒寫入幾十萬條消息,實現了數據寫入的超高性能。
DotNetdaily
零拷貝技術
解決了寫入問題,那消息讀取呢?頻繁的從磁盤讀數據然后發給消費者,性能又是如何保證的?Kafka為了解決這個問題,在讀數據的時候是引入零拷貝技術。
先看圖1是常規的硬盤讀寫流程,操作系統讀取硬盤數據后放在OS Cache,然后需要拷貝一次到Kafka進程,然后Kafka再將數據拷貝到Socket緩存才能發送到網卡,這樣流程的性能當然沒有保障。
再看圖2, Kafka的設計為直接將操作系統OS Cache中的數據發送到網卡,跳過了兩次拷貝數據的步驟,Socket緩存中僅僅會拷貝一個描述符過去,不會拷貝數據到Socket緩存,大大提升了數據讀取性能。
DotNetdaily
分享大會第五期
Kafka作為海量數據大并發高吞吐的消息隊列首選,在底層架構設計上有太多的技術點,有人說駕馭Kafka隊列的難度較高。其實是路子沒走對!
—張文亮《深入淺出Kafka:源碼解析與實踐原理》
此書言論一出,立馬引發社區各種呵呵,都說是耍嘴皮子功夫?為了向大伙證明實力,早在7月份他就在籌劃本次分享。?對Kafka感興趣的小伙伴都來聽聽吧!DotNet社區分享大會第五期:高吞吐低延遲Kafka實戰之道!
號稱自己筆記都能出書的文亮在圈內大小算個人物了,尤其在Kafka技術領域“屢放厥詞”,作為專業書的首席作者,文亮好歹也是做了多年開發的老架構師了,那駕馭Kafka如何才能走對路,今晚8點,是翻車還是封神,讓我們拭目以待!
DotNetdaily 特別鳴謝:
感謝知乎直播 / 嗶哩嗶哩 / 騰訊會議等渠道小伙伴們的支持,為確保直播順利進行,最大程度及時反饋大家的提問,請掃碼預約!(預約后安排觀看渠道)
DotNetdaily 本期送月餅
眼看中秋佳節將近,本期分享社區給大家準備了月餅禮盒!歡迎大家前來圍觀贏取!一起加油,讓DotNet社區越來越好!
、
DotNetdaily
高吞吐低延遲Kafka實戰之道!
社區分享會?09/25?20:00
主講:張文亮
《深入淺出Kafka》首席作者
趕快掃碼預約領取直播鏈接!
總結
以上是生活随笔為你收集整理的Confluent官博:Kafka最牛队列,性能15倍于RabbitMQ!的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 使用SWAGGER和ASP.NET CO
- 下一篇: 跟我一起学.NetCore之中间件(Mi