訊息佇列是分佈式系統中重要的元件
Kafka
RabbitMQ
RocketMQ ,老版本是 MetaQ 。
ActiveMQ ,目前用的人越來越少了。
特性 | ActiveMQ | RabbitMQ | RocketMQ | Kafka |
---|---|---|---|---|
單擊吞吐量 | 萬級 | 萬級 | 十萬級 | 10 萬級 |
訊息可靠性 | 有較低的概率丟失數據 | 經過參數優化設定,可以做到 0 丟失 | 經過參數優化設定,可以做到 0 丟失 | 經過參數優化設定,可以做到 0 丟失 |
可用性 | 高可用,主從 | 高可用,映象同步 | 非常高,分佈式架構 | 非常高,分佈式架構 |
延遲 | ms 級 | 微秒級 | ms 級 | ms 級 |
功能支援 | 完備 | 基於 erlang 開發,併發能力很強,效能極好,延時很低 | MQ 功能較爲完善,還是分佈式的,擴充套件性好 | 功能較爲簡單,主要支援簡單的 MQ 功能,在大數據領域的實時計算以及日誌採集被大規模使用 |
早起覆蓋率較高,目前社羣已經不活躍了,而且效能比較差。不推薦使用
優點
開源免費,比較穩定的支援,社羣活躍度也高
缺點
RabbitMQ可以實現延遲佇列,但是對RabbitMQ的依賴比較高,一旦切換技術棧無法使用
優點
Java 語言進行實現,更容易去深入研究和掌控它,中文社羣活躍
效能穩定
缺點
國產訊息佇列,與國外的生態圈對接較差
優點
使用Scala和Java開發,與周圍生態圈相容性最好,大數據和流計算領域應用廣泛
缺點
非同步批次操作設計,同步收發訊息方面響應延遲高
redis也可以做訊息佇列,使用list,rpush入隊,lpop出隊,在業務比較小的時候選擇redis做訊息佇列也是不錯的選擇
中小型公司,技術實力較爲一般,技術挑戰不是特別高,用 RabbitMQ 是不錯的選擇,業務比較簡單的也可以使用redis
大型公司,基礎架構研發實力較強,用 RocketMQ 是很好的選擇
大數據領域的實時計算、日誌採集等場景,用 Kafka 是業內標準的