RocketMQ是一款分佈式、隊列模型的消息中間件,有如下部分組成:架構
一、NameServer: 一個幾乎無狀態的節點,可集羣部署,節點之間無任何信息同步異步
二、Broker:是RocketMQ的核心組成部分,經過輕量級的Topic和隊列機制來維護消息存儲,Broker支持消息Push和Pull模式。支持千億級別的消息堆積能力分佈式
三、Producer:消息生產者,和NameServer通訊獲取topic路由信息,和NameServer保持長鏈接以及和該生產者關聯的全部broker保持長鏈接函數
四、Consumer:消費者,單個消費者和一臺nameserver保持長鏈接,定時查詢topic配置信息,根據topic路由和broker保持長鏈接源碼分析
一、單master模式:這種方式風險較大,一旦Broker 重啓或者宕機時,會致使整個服務不可用,不建議線上環境使用。性能
二、多master模式:一個集羣無 Slave,全是 Master,例如:3 個 Master編碼
優勢:配置簡單,單個Master 宕機或重啓維護對應用無影響,在磁盤配置爲 RAID10 時,即便機器宕機不可恢復狀況下,由與 RAID10 磁盤很是可靠,消息也不會丟(異步刷盤丟失少許消息,同步刷盤一條不丟)。性能最高。spa
缺點:單臺機器宕機期間,這臺機器上未被消費的消息在機器恢復以前不可訂閱,消息實時性會受到受到影響。3d
三、多master多slave模式、異步複製netty
每一個 Master 配置一個 Slave,有多對Master-Slave,HA 採用異步複製方式,主備有短暫消息延遲,毫秒級。
優勢:即便磁盤損壞,消息丟失的很是少,且消息實時性不會受影響,由於 Master 宕機後,消費者仍然能夠從 Slave 消費,此過程對應用透明。不須要人工干預。性能同多 Master 模式幾乎同樣。
缺點:Master 宕機,磁盤損壞狀況,會丟失少許消息。
四、多master多slave、同步雙寫
每一個 Master 配置一個 Slave,有多對Master-Slave,HA 採用同步雙寫方式,主備都寫成功,嚮應用返回成功。
優勢:數據與服務都無單點,Master宕機狀況下,消息無延遲,服務可用性與數據可用性都很是高
缺點:性能比異步複製模式略低,大約低 10%左右,發送單個消息的 RT 會略高。目前主宕機後,備機不能自動切換爲主機,後續會支持自動切換功能。
圖片借鑑:
一、MQ功能模塊:
rocketmq-remoting:通訊組件模塊,提供通訊須要的編碼解碼器,主要接口:
a、RemotingService:頂級接口
//nettyconfig配置啓動NIO監聽端口服務(ServerBootstrap)serverBootstrap.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-broker:Broker集羣功能代碼
BrokerStartup:啓動入口,提供命令參數解析,加載netty server,netty client,broker,messagestore配置初始化
BrokerController:初始化topicManager,consumerOffsetManager加載offset,以及subscriptionGroupManager加載消費組信息,messagestore加載commit log組裝consumer queue創建索引
FilterServerManager: 是對rocketmq-filtersrv過濾服務模塊封裝的接口,提供Tag過濾支持
ConsumerOffsetManager:消費進度管理
SlaveSynchronize:slave從master同步topicConfig、offset進度、delayOffset進度、subscribeptionGroup信息
SubscriptionGroupManager:用來管理訂閱組,包括訂閱權限等
TopicConfigManager:Topic配置管理
SendMessageProcessor:處理客戶端發送消息的請求
QueryMessageProcessor:查詢消息請求處理
PullMessageProcessor:拉消息請求處理
ClientManageProcessor:Client註冊與註銷管理
包路徑信息:
broker啓動流程:
rocketmq-store:存儲層原理
DefaultMessageStore:負責管理consumerqueue,commitlog
ConsumeQueue:由topic和queueId組成
Commitlog:負責消息存儲
MapedFileQueue:存儲消息對應的位置
MapedFile:消息對應磁盤位置
類圖:
存儲時序:
rocketmq-client:包括producer和consumer、admin
a、producer:提供了多種發送消息接口(回調,超時,指定MessageQueue),相關類圖:
a、Consumer:包括push創建長鏈接後的被動消費(subscribe),以及pull拉取方式
MessageModel:集羣和廣播消費模式
如下是接口對比:
Pull拉取時序:
Push時序:最終經過PullMessageService回調註冊的回調函數PullCallback,在調用consumer註冊的回調listener