mq和kafka的不同之處

2021-09-24 12:18:22 字數 1236 閱讀 3882

其實,作為訊息佇列來說,企業中選擇mq的還是多數,因為像rabbit,rocket等mq中介軟體都屬於很成熟的產品,效能一般但可靠性較強,而kafka原本設計的初衷是日誌統計分析,現在基於大資料的背景下也可以做運營資料的分析統計,而redis的主要場景是記憶體資料庫,作為訊息佇列來說可靠性太差,而且速度太依賴網路io,在伺服器本機上的速度較快,且容易出現資料堆積的問題,在比較輕量的場合下能夠適用。

rabbitmq,遵循amqp協議,由內在高併發的erlanng語言開發,用在實時的對可靠性要求比較高的訊息傳遞上。

kafka是linkedin於2023年12月份開源的訊息發布訂閱系統,它主要用於處理活躍的流式資料,大資料量的資料處理上。

1)在架構模型方面

rabbitmq遵循amqp協議,rabbitmq的broker由exchange,binding,queue組成,其中exchange和binding組成了訊息的路由鍵;客戶端producer通過連線channel和server進行通訊,consumer從queue獲取訊息進行消費(長連線,queue有訊息會推送到consumer端,consumer迴圈從輸入流讀取資料)。rabbitmq以broker為中心;有訊息的確認機制。

kafka遵從一般的mq結構,producer,broker,consumer,以consumer為中心,訊息的消費資訊儲存的客戶端consumer上,consumer根據消費的點,從broker上批量pull資料;無訊息確認機制。

2)在吞吐量

kafka具有高的吞吐量,內部採用訊息的批量處理,zero-copy機制,資料的儲存和獲取是本地磁碟順序批量操作,具有o(1)的複雜度,訊息處理的效率很高。

rabbitmq在吞吐量方面稍遜於kafka,他們的出發點不一樣,rabbitmq支援對訊息的可靠的傳遞,支援事務,不支援批量的操作;基於儲存的可靠性的要求儲存可以採用記憶體或者硬碟。

3)在可用性方面

rabbitmq支援miror的queue,主queue失效,miror queue接管。

kafka的broker支援主備模式。

4)在集群負載均衡方面,

kafka採用zookeeper對集群中的broker、consumer進行管理,可以註冊topic到zookeeper上;通過zookeeper的協調機制,producer儲存對應topic的broker資訊,可以隨機或者輪詢傳送到broker上;並且producer可以基於語義指定分片,訊息傳送到broker的某分片上。

rabbitmq的負載均衡需要單獨的loadbalancer進行支援。

和equals的不同之處

int a 3 int b 3 string str1 123 string str2 123 string str3 newstring 123 system.out.println a b的結果 a b true,基本資料型別時,進行的是值比較 system.out.println str1 s...

vue和react不同之處

vue2和react的區別,細節篇 react是函式式程式設計,immutable.js vue是大部分是物件導向程式設計,object.freeze vue中函式式程式設計 filter和reduce函式用法 0.reactjs與vue相比較,預設目錄結構沒有webpack相關配置,也沒有路由元件...

陣列和指標的不同之處

我相信很多初學c語言的人,肯定會以為指標和陣列是等價的,而那些學了一段時間的人或許也分不清兩者之間的區別吧。那麼我有必要和大家千談一下c語言中陣列和指標的不同之處了。1.陣列名對應著一塊記憶體,而不是指向一塊記憶體。其位址與容量在生命週期內保持不變 全域性或棧 只有陣列的內容可變 指標可以隨時指向任...