在選擇合適的消息隊(duì)列或消息傳遞系統(tǒng)時(shí),了解各個(gè)系統(tǒng)的特點(diǎn)和優(yōu)勢非常重要。下面對(duì) RabbitMQ、RocketMQ、Kafka 和 Pulsar 進(jìn)行綜合對(duì)比,涵蓋架構(gòu)、性能、可用性、適用場景等方面:


一、消息模型
1.1、RabbitMQ

基于交換機(jī)(Exchange)和隊(duì)列(Queue)的靈活路由
交換機(jī)(Exchange):消息發(fā)布到交換機(jī),通過路由鍵(Routing Key)決定消息發(fā)送到哪個(gè)隊(duì)列。
隊(duì)列(Queue):消息存儲(chǔ)的地方,消費(fèi)者從隊(duì)列中獲取消息。
路由鍵(Routing Key):用于匹配消息和隊(duì)列的鍵。
綁定(Binding):連接交換機(jī)和隊(duì)列,定義路由規(guī)則。
消息傳遞模式:
Direct:消息通過精確匹配路由鍵發(fā)送到隊(duì)列。
Fanout:消息廣播到所有綁定的隊(duì)列。
Topic:消息按模式匹配路由鍵發(fā)送到隊(duì)列。
RocketMQ

基于主題(Topic)和消息隊(duì)列的高可用、高吞吐量消息系統(tǒng)
消息傳遞模式:
Kafka

高吞吐量的發(fā)布/訂閱系統(tǒng),基于主題和分區(qū)(Partition)
消息傳遞模式:
Pulsar

多租戶、高可用的消息流平臺(tái),支持靈活的消息傳遞模式
消息傳遞模式:
產(chǎn)品架構(gòu)
RabbitMQ 架構(gòu)

核心組件:
生產(chǎn)者(Producer):發(fā)送消息到交換機(jī)。
交換機(jī)(Exchange):根據(jù)綁定規(guī)則路由消息到隊(duì)列。主要類型有 direct、fanout、topic 和 headers。
隊(duì)列(Queue):存儲(chǔ)消息,消費(fèi)者從隊(duì)列中消費(fèi)消息。
消費(fèi)者(Consumer):從隊(duì)列中獲取并處理消息。
綁定(Binding):連接交換機(jī)和隊(duì)列,定義路由規(guī)則。
架構(gòu)特點(diǎn):
RocketMQ 架構(gòu)

核心組件:
生產(chǎn)者(Producer):發(fā)送消息到主題(Topic)。
主題(Topic):按主題分類消息,每個(gè)主題有多個(gè)隊(duì)列。
消息隊(duì)列(Message Queue):存儲(chǔ)消息,是主題的子集。
消費(fèi)者(Consumer):從消息隊(duì)列中消費(fèi)消息。
名稱服務(wù)器(Name Server):管理主題和消息隊(duì)列的元數(shù)據(jù),提供路由信息。
Broker:存儲(chǔ)消息并處理消息傳遞,管理消息隊(duì)列。
架構(gòu)特點(diǎn):
Kafka 架構(gòu)

核心組件:
生產(chǎn)者(Producer):將消息發(fā)送到主題的分區(qū)(Partition)。
主題(Topic):按主題分類消息,每個(gè)主題分為多個(gè)分區(qū)。
分區(qū)(Partition):消息按順序存儲(chǔ)在分區(qū)中,實(shí)現(xiàn)并行處理。
消費(fèi)者(Consumer):從分區(qū)消費(fèi)消息,可以指定消費(fèi)位移(Offset)。
消費(fèi)者組(Consumer Group):組內(nèi)消費(fèi)者協(xié)作消費(fèi)分區(qū),實(shí)現(xiàn)負(fù)載均衡。
Broker:Kafka 服務(wù)器,負(fù)責(zé)存儲(chǔ)消息并處理消息傳遞。
ZooKeeper:管理集群的元數(shù)據(jù)和協(xié)調(diào) Broker 的活動(dòng)。
架構(gòu)特點(diǎn):
Pulsar 架構(gòu)

核心組件:
生產(chǎn)者(Producer):發(fā)送消息到主題或分區(qū)。
主題(Topic):按主題分類消息,可以分為多個(gè)分區(qū)。
分區(qū)(Partition):主題的子集,分區(qū)內(nèi)消息有序存儲(chǔ)。
消費(fèi)者(Consumer):從主題或分區(qū)消費(fèi)消息。
Broker:處理客戶端請求,協(xié)調(diào)消息的存儲(chǔ)和傳遞。
BookKeeper(Bookies):提供持久化存儲(chǔ),將消息存儲(chǔ)在多個(gè) Bookie 中,確保數(shù)據(jù)可靠。
ZooKeeper:管理集群元數(shù)據(jù),協(xié)調(diào) Broker 和 BookKeeper 的活動(dòng)。
架構(gòu)特點(diǎn):
產(chǎn)品性能
吞吐量

圖片來源于confluent.io
RabbitMQ:靈活性和可靠性較高,但吞吐量最低。
RocketMQ:高可用性和順序消息支持,吞吐量次于 RabbitMQ。
Pulsar:多租戶和分區(qū)支持,提供較高吞吐量。
Kafka:專為高吞吐量和低延遲設(shè)計(jì),適合大規(guī)模數(shù)據(jù)流處理,吞吐量最高。
吞吐量從大到小的一般排名:
kafka->pulsar->rocketmq->rabbitmq
延遲

?
圖片與表格來源于confluent.io
在低吞吐量的情況下,消息隊(duì)列系統(tǒng)的響應(yīng)時(shí)間會(huì)受到多種因素的影響,包括系統(tǒng)架構(gòu)、消息大小、網(wǎng)絡(luò)延遲等。響應(yīng)時(shí)間從快到慢的一般排名:
rabbitmq->kafka->pulsar->rocketmq
而在高吞吐量的情況下,不同的消息隊(duì)列系統(tǒng)的響應(yīng)時(shí)間會(huì)受到它們設(shè)計(jì)和優(yōu)化的影響。響應(yīng)時(shí)間從快到慢的一般排名:
kafka->pulsar->rocketmq->rabbitmq
閱讀原文:原文鏈接
該文章在 2025/5/6 10:57:30 編輯過