與Kafka、RocketMQ的差異
更新時間 2024-09-11 17:09:02
最近更新時間: 2024-09-11 17:09:02
分享文章
本文主要介紹分布式消息服務RabbitMQ與Kafka、RocketMQ的差異。
分布式消息服務RabbitMQ與Kafka、RocketMQ的差異,如下表。
| 功能項 | RocketMQ | Kafka | RabbitMQ |
|---|---|---|---|
| 優先級隊列 | 不支持 | 不支持 | 支持。建議優先級大小設置在0-10之間。 |
| 延遲隊列 | 支持 | 不支持 | 不支持 |
| 死信隊列 | 支持 | 不支持 | 支持 |
| 消息重試 | 支持 | 不支持 | 不支持 |
| 消費模式 | 支持客戶端主動拉取和服務端推送兩種方式 | 客戶端主動拉取 | 支持客戶端主動拉取以及服務端推送兩種模式 |
| 廣播消費 | 支持 | 支持 | 支持 |
| 消息回溯 | 支持 | 支持。Kafka支持按照offset和timestamp兩種維度進行消息回溯。 | 不支持。RabbitMQ中消息一旦被確認消費就會被標記刪除。 |
| 消息堆積 | 支持 | 支持。考慮吞吐因素,Kafka的堆積效率比RabbitMQ總體上要高。 | 支持 |
| 持久化 | 支持 | 支持 | 支持 |
| 消息追蹤 | 支持 | 不支持 | 支持。RabbitMQ中可以采用Firehose或者rabbitmq_tracing插件實現,但開啟rabbitmq_tracing插件會影響性能,建議只在定位問題過程中開啟。 |
| 消息過濾 | 支持 | 支持 | 不支持,但可以自行封裝。 |
| 多租戶 | 支持 | 不支持 | 支持 |
| 多協議支持 | 兼容RocketMQ協議 | 只支持Kafka自定義協議。 | RabbitMQ基于AMQP協議實現,同時支持MQTT、STOMP等協議。 |
| 跨語言支持 | 支持多語言的客戶端 | 采用Scala和Java編寫,支持多種語言的客戶端。 | 采用Erlang編寫,支持多種語言的客戶端。 |
| 流量控制 | 待規劃 | 支持client和user級別,通過主動設置可將流控作用于生產者或消費者。 | RabbitMQ的流控基于Credit-Based算法,是內部被動觸發的保護機制,作用于生產者層面。 |
| 消息順序性 | 單隊列(queue)內有序 | 支持單分區(partition)級別的順序性。 | 不支持。需要單線程發送、單線程消費并且不采用延遲隊列、優先級隊列等一些高級功能整體配合,才能實現消息有序。 |
| 安全機制 | 支持SSL認證 | 支持SSL、SASL身份認證和讀寫權限控制。 | 與Kafka相似 |
| 事務性消息 | 支持 | 支持 | 支持 |