消息队列—主要消息中间件优势对比
| 資料文檔 | 中 有kafka作者自己寫的書,網上資料也有一些 | 多 有一些不錯的書,網上資料多 | 少 沒有專門寫rocketmq的書,網上的資料良莠不齊,官方文檔很簡潔,但是對技術細節沒有過多的描述 |
| 開發語言 | Scala | Erlang | java |
| 支持的協議 | 自己的一套,基于TCP | AMQP | 自己定義的一套 |
| 消息存儲 | 內存、磁盤、數據庫。支持大量堆積。 | 內存、磁盤。支持少量堆積。 | 磁盤。支持大量堆積。 |
| 消息事務 | 支持 | 支持 | 支持 |
| 負載均衡 | 支持 | 對負載均衡的支持不好。 | 支持 |
| 集群方式 | 天然的‘Leader-Slave’無狀態集群,每臺服務器既是Master也是Slave | 支持簡單集群,'復制'模式,對高級集群模式支持不好。 | 常用 多對'Master-Slave' 模式,開源版本需手動切換Slave變成Master |
| 管理界面 | ? | ? | ? |
| 可用性 | ? | ? | ? |
| 消息重復 | ? | ? | ? |
| 吞吐量TPS | 按批次發送消息和消費消息 | 比較大? | 大 |
| 訂閱形式和消息分發 | 基于topic以及按照topic進行正則匹配的發布訂閱模式 | 供了4種:direct, topic ,Headers和fanout。 | 基于topic/messageTag以及按照消息類型、屬性進行正則匹配的發布訂閱模式。 |
| 順序消息 | 支持 | 不支持 | 支持 |
| 消息確認 | 支持 | 支持 | 支持 |
| 消息回溯 | ? | ? | ? |
| 消息重試 | ? | ? | ? |
| 并發度 | 高 一個線程一個消費者,kafka限制消費者的個數要小于等于分區數,如果要提高并行度,可以在消費者中再開啟多線程,或者增加consumer實例數量。 | 極高 1.本身是用Erlang語言寫的,并發性能高。 2.可在消費者中開啟多線程,最常用的做法是一個channel對應一個消費者,每一個線程把持一個channel,多個線程復用connection的tcp連接,減少性能開銷。 3.當rabbitmq隊列擁有多個消費者的時候,隊列收到的消息將以輪詢的分發方式發送給消費者。每條消息只會發送給訂閱列表里的一個消費者,不會重復。這種方式非常適合擴展,而且是專門為并發程序設計的。 4.如果某些消費者的任務比較繁重,那么可以設置basicQos限制信道上消費者能保持的最大未確認消息的數量,在達到上限時,rabbitmq不再向這個消費者發送任何消息。 | 1、rocketmq限制消費者的個數少于等于隊列數,但是可以在消費者中再開啟多線程,這一點和kafka是一致的,提高并行度的方法相同。 修改消費并行度方法 a) 同一個 ConsumerGroup 下,通過增加 Consumer 實例數量來提高并行度,超過訂閱隊列數的 Consumer實例無效。 b) 提高單個 Consumer 的消費并行線程,通過修改參數consumeThreadMin、consumeThreadMax 2、同一個網絡連接connection,客戶端多個線程可以同時發送請求,連接會被復用,減少性能開銷。 |
參考文章:[消息中間件]幾種常用的消息中間件對比
總結
以上是生活随笔為你收集整理的消息队列—主要消息中间件优势对比的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 消息队列—简介以及使用场景
- 下一篇: 性能优化—代码层面优化