RocketMQ原理及源碼解析


 

RocketMQ原理深入:

一、定義:

RocketMQ是一款分布式、隊列模型的消息中間件,有以下部分組成:

1、NameServer: 一個幾乎無狀態的節點,可集群部署,節點之間無任何信息同步

2、Broker:RocketMQ的核心組成部分,通過輕量級的Topic和隊列機制來維護消息存儲,Broker支持消息PushPull模式。支持千億級別的消息堆積能力

3、Producer:消息生產者,和NameServer通信獲取topic路由信息,和NameServer保持長連接以及和該生產者關聯的所有broker保持長連接

4、Consumer:消費者,單個消費者和一台nameserver保持長連接,定時查詢topic配置信息,根據topic路由和broker保持長連接

二、Broker集群方式

1、master模式:這種方式風險較大,一旦Broker 重啟或者宕機時,會導致整個服務不可用,不建議線上環境使用。

2、master模式:一個集群無 Slave,全是 Master,例如:3 Master

   優點:配置簡單,單個Master 宕機或重啟維護對應用無影響,在磁盤配置為 RAID10 時,即使機器宕機不可恢復情況下,由與 RAID10 磁盤非常可靠,消息也不會丟(異步刷盤丟失少量消息,同步刷盤一條不丟)。性能最高。

   缺點:單台機器宕機期間,這台機器上未被消費的消息在機器恢復之前不可訂閱,消息實時性會受到受到影響。

3、masterslave模式、異步復制

每個 Master 配置一個 Slave,有多對Master-SlaveHA 采用異步復制方式,主備有短暫消息延遲,毫秒級。

   優點:即使磁盤損壞,消息丟失的非常少,且消息實時性不會受影響,因為 Master 宕機后,消費者仍然可以從 Slave 消費,此過程對應用透明。不需要人工干預。性能同多 Master 模式幾乎一樣。

   缺點:Master 宕機,磁盤損壞情況,會丟失少量消息。

4、masterslave、同步雙寫

每個 Master 配置一個 Slave,有多對Master-SlaveHA 采用同步雙寫方式,主備都寫成功,向應用返回成功。

   優點:數據與服務都無單點,Master宕機情況下,消息無延遲,服務可用性與數據可用性都非常高

   缺點:性能比異步復制模式略低,大約低 10%左右,發送單個消息的 RT 會略高。目前主宕機后,備機不能自動切換為主機,后續會支持自動切換功能。

 

三、RocketMQ架構圖:

圖片借鑒:

 

四、RocketMQ源碼分析:

1、MQ功能模塊:

 

 

rocketmq-remoting:通信組件模塊,提供通信需要的編碼解碼器,主要接口:

a、RemotingService:頂級接口

//nettyconfig配置啟動NIO監聽端口服務(ServerBootstrapserverBootstrap.bind().sync()

    public void start();

//關閉服務端口

    public void shutdown();

//注冊rpc響應鈎子

public void registerRPCHook(RPCHook rpcHook);

b、RemotingServer:實現RemotingService,提供注冊請求處理器和調用方式

c、RemotingClient:實現RemotingService,遠程通信,Client接口

d、ChannelEventListener:提供鏈接,關閉,異常,空閑事件監聽接口

主要接口圖:

 

Rocketmq-namesrv:對應NameServer服務實例,一些時序圖:

 

 

rocketmq-brokerBroker集群功能代碼

BrokerStartup:啟動入口,提供命令參數解析,加載netty server,netty client,broker,messagestore配置初始化

BrokerController:初始化topicManager,consumerOffsetManager加載offset,以及subscriptionGroupManager加載消費組信息,messagestore加載commit log組裝consumer queue建立索引

FilterServerManager: 是對rocketmq-filtersrv過濾服務模塊封裝的接口,提供Tag過濾支持

ConsumerOffsetManager:消費進度管理

SlaveSynchronizeslavemaster同步topicConfigoffset進度、delayOffset進度、subscribeptionGroup信息

SubscriptionGroupManager:用來管理訂閱組,包括訂閱權限等

TopicConfigManagerTopic配置管理

SendMessageProcessor:處理客戶端發送消息的請求

QueryMessageProcessor:查詢消息請求處理

PullMessageProcessor:拉消息請求處理

ClientManageProcessorClient注冊與注銷管理

包路徑信息:

broker啟動流程:

 

rocketmq-store:存儲層原理

DefaultMessageStore:負責管理consumerqueue,commitlog

ConsumeQueue:由topicqueueId組成

Commitlog:負責消息存儲

MapedFileQueue:存儲消息對應的位置

MapedFile:消息對應磁盤位置

類圖:

存儲時序:

rocketmq-client:包括producerconsumeradmin

a、producer:提供了多種發送消息接口(回調,超時,指定MessageQueue),相關類圖:

a、Consumer:包括push建立長連接后的被動消費(subscribe),以及pull拉取方式

MessageModel:集群和廣播消費模式

以下是接口對比:

Pull拉取時序:

Push時序:最終通過PullMessageService回調注冊的回調函數PullCallback,在調用consumer注冊的回調listener

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM