RocketMQ菜鳥小結(jié)

日常工作中使用過RabbitMQ、RocketMQ、Kafka這幾個常用的MQ,為了備忘,將RocketMQ相關(guān)資料上傳這里。



關(guān)鍵概念:

Producer(生產(chǎn)者)


Consumer(消費者)


Producer Group(生產(chǎn)者組)

維護生產(chǎn)組

當某臺producer宕機時,broker會向同組其他producer確認事務(wù)情況

Consumer Group(消費者組)

負責將consumer分組

根據(jù)此會制定消費方式

Broker

消費方式

廣播消費(類似于 JMS pub/sub): 所有的consumergoup的所有consumer都會消費到同一條消息

集群消費(同consumergroup內(nèi)類似于 JMS point-to-point):每個consumergroup都會有一個consumer消費到消息

NameSrv(域名服務(wù))

管理多broker常用

維護broker路由

Topic(主題)

正常TOPIC:需要提前創(chuàng)建

重試隊列 RETRY TOPIC:創(chuàng)建ConsumerGroup時自動創(chuàng)建

死信隊列 DLQ(Dead Letter Queue) TOPIC:創(chuàng)建ConsumerGroup時自動創(chuàng)建

MessageQueue(消息隊列)

可理解為一個不限長的Array,會定期移除過期(超時)的消息數(shù)據(jù)

topic下存儲消息的offset單位(邏輯隊列),也是發(fā)送的路徑

設(shè)定topic的時候可以指定 寫隊列數(shù)與讀隊列數(shù)

通過offset概念來維護,offset是long型,理論百年不會溢出

了解kafka的可以按partition理解

Message(消息)

消息,使用MQ發(fā)送的消息內(nèi)容,每次只會向一個Queue發(fā)送消息

MsgID,RocketMQ服務(wù)器生成

MsgKey,生產(chǎn)者生成

Tag,標簽。在消息上的信息,用于隔離消息:隔離可以由消費者過濾,隔離也可以由RocketMQ服務(wù)過濾

順序消息

可以通過業(yè)務(wù)hash ,將同hash的消息放入同隊列,然后使用有序listener去消費



特性策略及方法


Message Priority(優(yōu)先級)

RocketMQ不支持消息優(yōu)先級

可以通過指定Broker/Queue的方式來做優(yōu)先級隔離

Message Filter(過濾)

Broker過濾,通過配置subExpression

Consumer過濾,通過消費代碼解析Tag過濾

Message Persistence(持久化)

持久化到MYSQL:Buffer擴展

KV存儲系統(tǒng),Buffer擴展

文件,Buffer擴展

內(nèi)存鏡像,鏡像恢復(fù)

消息本身存儲在內(nèi)存buffer內(nèi)

異步刷盤,JVM->PAGECACHE->刷盤

mmap+write(0拷貝),MappedByteBuffer(nio文件讀寫模型,直接映射到緩沖區(qū)pagecache),文件映射到內(nèi)存上,減少了直接調(diào)用os的系統(tǒng)命令,進行從內(nèi)核空間和用戶空間的拷貝操作

Message Reliablity(消息可靠)

RocketMQ消息基本不丟。因此稱其可靠。

不丟或少丟的情況:Broker正常關(guān)閉,Broker Crash,OS Crash,供電閃斷等

非雙寫模式全丟的情況:無法開機,磁盤損壞等

Low Latency Messaging(低延遲)

RocketMQ使用長輪詢pull,較低延遲的將消息獲取到消費者服務(wù)

Repeat Message(消息重復(fù))

At least Once(消息至少投遞一次):Consumer只有消費成功才會ACK,但是不保證廣播每個consumer都能收到消息

Exactly Only Once(消息僅一次):業(yè)務(wù)控制-不能重復(fù)生產(chǎn);業(yè)務(wù)控制-不能重復(fù)消費;

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?RocketMQ不能嚴格保證不重復(fù);當消息狀態(tài)不可知時,會重復(fù);網(wǎng)絡(luò)問題;宕機問題等

Consume Again(消息回溯/重新消費)

RockerMQ可以按照時間回溯消費

Store(消息存儲)

Consume Queue

~/store/consumequeue/${topic}/${queue}/${file},用于記錄位置信息,定位commitlog內(nèi)位置(offset記錄)

Commit Log

消息內(nèi)容的物理文件(mapped),通過Consume Queue的offset信息指定

config

????consumerOffset????

????????consumerOffset.json

? ? ? ?offsetTable(標記所有消息消費offset的數(shù)據(jù))

????????key:topic@consumergroup

????????通常集群會有效維護/廣播會在本地再維護一個

????delayOffset

????????存儲延遲消息數(shù)據(jù)

????????delayOffset.json

????subscriptionGroup

????????存儲所有消費組的配置信息

????????subscriptionGroup.json

????topics

????????存儲所有的topic信息

????????topics.json

????index

????????索引結(jié)構(gòu)維護

Send Message(消息發(fā)送)

同步、異步、單向



還有物理結(jié)構(gòu)圖,邏輯結(jié)構(gòu)圖,管理臺說明。這些部分繪圖需要一定時間,后續(xù)抽空補充。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容