再见,RabbitMQ,你好,Kafka!
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
容器、Kubernetes、DevOps、微服務、云原生,這些技術名詞的頻繁出現,預兆著新的互聯網技術時代的到來,大數據高并發將不再遙遠,而是大部分項目都必須具備的能力了,而消息隊列是必備的了。成熟的消息隊列產品很多,說到海量數據下高吞吐高并發,Kafka不是針對誰,毋庸置疑的首選!
Kafka介紹
Kafka是一個分布式的基于發布訂閱的消息隊列,有著無與倫比的消息處理能力,相比與其他消息系統,具有以下特性:
高吞吐:普通服務器每秒幾十萬條消息
低延遲:TB級數據延遲最低只有幾毫秒
高并發:支持數千個客戶端同時讀寫
可擴展:Kafka集群支持熱擴展
可靠性:消息被持久化到本地磁盤
容錯性:允許集群中節點故障
正是因為Kafka優異的表現,現在已經被廣泛應用于海量日志收集、大數據處理、流式處理等場景!下面我們來探討下,Kafka到底是如何做到這么高的吞吐量和性能的呢?
頁緩存技術 + 磁盤順序寫
首先,Kafka的消息數據是寫在硬盤上的,保證了消息數據的可靠性,但寫硬盤還能保證幾十萬條/秒的消息處理速度,是怎么做到的?
因為Kafka在這里有極為優秀和出色的設計!為了保證數據的寫入性能,Kafka是基于操作系統的頁緩存來實現文件寫入的。
頁緩存page cache,是操作系統自己管理的內存緩存,也叫os cache。寫入消息時,是直接寫入這個頁緩存里,然后由操作系統自己決定什么時候把頁緩存里的數據真的刷入磁盤文件中。
這樣一來,消息寫入性能就變成了寫內存,不是在寫磁盤,請看下圖。
Kafka高性能寫入的再一個設計是磁盤順序寫。一般磁盤寫入都是隨機寫,隨便找到文件的某個位置來寫數據,這樣的性能非常差,但是追加文件末尾按照順序的方式來寫數據的話,其寫入性能跟寫內存的性能差不多。
總結下, Kafka在寫數據的時候,一方面基于了操作系統的page cache來寫數據,另一方面是采用磁盤順序寫的方式,就實現了寫入數據的超高性能,才能做到在普通服務器上每秒寫入幾十萬條消息。
零拷貝技術
解決了寫入問題,那消息讀取呢?頻繁的從磁盤讀數據然后發給消費者,性能又是如何保證的?Kafka為了解決這個問題,在讀數據的時候是引入零拷貝技術。
先看圖1是常規的硬盤讀寫流程,操作系統讀取硬盤數據后放在OS Cache,然后需要拷貝一次到Kafka進程,然后Kafka再將數據拷貝到Socket緩存才能發送到網卡,這樣流程的性能當然沒有保障。
再看圖2, Kafka的設計為直接將操作系統OS Cache中的數據發送到網卡,跳過了兩次拷貝數據的步驟,Socket緩存中僅僅會拷貝一個描述符過去,不會拷貝數據到Socket緩存,大大提升了數據讀取性能。
Kafka作為海量數據大并發高吞吐的消息隊列首選,在底層架構設計上有太多的技術點,要想駕馭Kafka隊列,要想在高端筆試面試中占據優勢,你需要一波硬核訓練營!下面邀請到資深架構師Clay老師為大家帶來的《Kafka硬核訓練營》,趕緊掃碼進群免費學習起來,還有微軟MVP大佬領銜答疑交流!
Day1
搭建Kafka集群,基于.NET Core對接實操,核心工作流程深入,理解Kafka數據分區策略和機制
Day2
Kafka單機10w+吞吐演示和詳細讀寫原理解讀,TB級海量數據存儲和數據壓縮策略剖析
Day3
圖解數據可靠性保證原理,優化Kafka的高可用配置實踐,從架構層揭秘原理
3天時間,完成Kafka的實戰和核心突破,金九銀十跳槽季領先一步!為更好的完成課程學習,下面還為你準備了配套的預習資料,掃碼添加助教小姐姐領取吧!
獲取本文全套學習資料
掃碼添加
領取人數較多,添加以下號碼也可免費領取哦!
微信號:18672997769
微軟MVP組建的.Net社區
你加入了嗎?
微軟MVP:Eleven組建
國內首屈一指的.Net活躍社區
完整配套的學習資料
最新最熱的技術文章
社區內優質崗位直推
全部免費奉送給大家
優質內容持續更新中
戳以下文章立即獲取
????????????
禁止外傳!社區內部VIP干貨資料自取
(課程視頻+面試題+技術專刊+崗位內推)
總結
以上是生活随笔為你收集整理的再见,RabbitMQ,你好,Kafka!的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 将终结点图添加到你的ASP.NET Co
- 下一篇: 【视频回放与课件】搭上AI快车-在线公益