【訊息佇列】如何做技術選型?

2020-08-08 22:44:20

什麼是訊息佇列

訊息佇列是分佈式系統中重要的元件

  • 主要擁有解決應用耦合、非同步訊息、流量削峯、日誌處理、訊息通訊
  • 可實現高效能、高可用、可伸縮、最終一致性架構

目前主流的訊息佇列

Kafka
RabbitMQ
RocketMQ ,老版本是 MetaQ 。
ActiveMQ ,目前用的人越來越少了。

優缺點對比

特性 ActiveMQ RabbitMQ RocketMQ Kafka
單擊吞吐量 萬級 萬級 十萬級 10 萬級
訊息可靠性 有較低的概率丟失數據 經過參數優化設定,可以做到 0 丟失 經過參數優化設定,可以做到 0 丟失 經過參數優化設定,可以做到 0 丟失
可用性 高可用,主從 高可用,映象同步 非常高,分佈式架構 非常高,分佈式架構
延遲 ms 級 微秒級 ms 級 ms 級
功能支援 完備 基於 erlang 開發,併發能力很強,效能極好,延時很低 MQ 功能較爲完善,還是分佈式的,擴充套件性好 功能較爲簡單,主要支援簡單的 MQ 功能,在大數據領域的實時計算以及日誌採集被大規模使用

ActiveMQ

早起覆蓋率較高,目前社羣已經不活躍了,而且效能比較差。不推薦使用

RabbitMQ

優點
開源免費,比較穩定的支援,社羣活躍度也高

缺點
RabbitMQ可以實現延遲佇列,但是對RabbitMQ的依賴比較高,一旦切換技術棧無法使用

RocketMQ

優點
Java 語言進行實現,更容易去深入研究和掌控它,中文社羣活躍

效能穩定

缺點
國產訊息佇列,與國外的生態圈對接較差

Kafka

優點
使用Scala和Java開發,與周圍生態圈相容性最好,大數據和流計算領域應用廣泛

缺點
非同步批次操作設計,同步收發訊息方面響應延遲高

拓展—Redis

redis也可以做訊息佇列,使用list,rpush入隊,lpop出隊,在業務比較小的時候選擇redis做訊息佇列也是不錯的選擇

總結

中小型公司,技術實力較爲一般,技術挑戰不是特別高,用 RabbitMQ 是不錯的選擇,業務比較簡單的也可以使用redis

大型公司,基礎架構研發實力較強,用 RocketMQ 是很好的選擇

大數據領域的實時計算、日誌採集等場景,用 Kafka 是業內標準的