二殴蹄、RocketMQ-Broker啟動(dòng)流程

一袭灯、簡述

本文簡述一下Broker的啟動(dòng)流程绑嘹,主要涉及的步驟及簡要配置工腋,不做過多深入。

二蟋恬、BrokerStartup筋现、BrokerController

啟動(dòng)類箱歧,類結(jié)構(gòu)如下:

BrokerStartup.java

首先會(huì)調(diào)用createBrokerController()實(shí)例化一個(gè)BrokerController(它才是核心的啟動(dòng)類)呀邢,然后調(diào)用start()方法价淌,這個(gè)套路和Namesrv的思路一致瞒津。

1巷蚪、createBrokerController()

與Namesrv類似屁柏,通過一頓騷操作有送,將cmd命令行的參數(shù)進(jìn)行解析雀摘,并產(chǎn)出4個(gè)配置(這四個(gè)配置本身有默認(rèn)配置):

  • BrokerConfig
    broker自身的一些配置,例如namesrvAddr(namesrv地址)涯塔,brokerIP1伤塌,brokerIP2轧铁,brokerName齿风,defaultTopicQueueNums(默認(rèn)8個(gè)隊(duì)列)救斑,autoCreateTopicEnable(默認(rèn)居然是true)等等
  • NettyServerConfig
    nettyserver的一些配置真屯,最重要的 listenPort10911)及serverWorkerThreads(worker的線程數(shù)量)绑蔫、serverOnewaySemaphoreValue(one-way模式發(fā)送的最大線程數(shù))、serverAsyncSemaphoreValue(異步模式最大的線程數(shù))携添,serverSocketSndBufSize(發(fā)送消息最大長度)等等
  • NettyClientConfig
    netty客戶端(producer烈掠、consumer)的一些配置,connectTimeoutMillis(超時(shí)時(shí)間默認(rèn)3秒)瘾蛋,channelNotActiveInterval(通道異常檢查時(shí)間矫限,默認(rèn)60秒)等等
  • MessageStoreConfig
    消息commitLog固化配置奇唤,storePathCommitLog(commitLog目錄),mapedFileSizeCommitLog(commitLog大小咬扇,默認(rèn)1G)懈贺,
    messageDelayLevel(消息延遲投遞級別:1s 5s 10s 30s 1m 2m 3m 4m 5m 6m 7m 8m 9m 10m 20m 30m 1h 2h)

與Namesrv類似梭灿,如果cmd中含有:

  • -c path,則會(huì)加載path指定的配置文件中的配置
  • -p 會(huì)打印所有的配置堡妒,并退出
  • -m 只打印 @ImportantField 注解標(biāo)注的配置皮迟,并退出

待上面的配置都加載完畢后,調(diào)用initialize進(jìn)行初始化:

boolean initResult = controller.initialize();

2忿檩、controller.initialize()

這個(gè)方法很重要爆阶,做了一堆的事情辨图,在羅列功能之前,先看這個(gè)圖

log地址

RocketMQ默認(rèn)會(huì)在/home(我的是windows孽尽,所以home=C:\User\asd)下新建一個(gè)store文件夾杉女,里面存放了一堆一堆很重要的配置,commitlog(固化的消息)速勇,configtopic坎拐、subscriptionGroupconsumerFilter都伪、consumerOffset积担、delayOffset配置)帝璧,consumequeue(消費(fèi)者隊(duì)列配置)等等,都很重要褐耳,而controller.initialize()方法主要就是在broker啟動(dòng)的時(shí)候?qū)@些配置進(jìn)行初始化

  • topicConfigManager.load()
    加載C:\Users\asd\store\config\topics.json
  • consumerOffsetManager.load()
    加載C:\Users\asd\store\config\consumerOffset.json
  • subscriptionGroupManager.load()
    加載C:\Users\asd\store\config\subscriptionGroup.json
  • consumerFilterManager.load()
    加載C:\Users\asd\store\config\consumerFilter.json
  • messageStore.load()
    加載C:\Users\asd\store\commitLog\ 下所有消息日志文件

該加載的都加載完了铃芦,然后啟動(dòng)NettyServer以及一堆的 Executor 線程池

  • remotingServer
    默認(rèn)監(jiān)聽端口 10911
  • fastRemotingServer
    默認(rèn)監(jiān)聽端口 10911 - 2 = 10909杨帽,莫非和VIP通道有關(guān)嗤军?后續(xù)補(bǔ)充
  • sendMessageExecutor
    發(fā)送消息的線程池
  • pullMessageExecutor
    拉取消息的線程池
  • queryMessageExecutor
    查詢消息的線程池
  • adminBrokerExecutor
    不知道干啥的線程池
  • clientManageExecutor
    客戶端連接管理線程池
  • heartbeatExecutor
    心跳線程池
  • endTransactionExecutor
    事務(wù)結(jié)束線程池
  • consumerManageExecutor
    消費(fèi)者連接線程池

線程池初始化呢完畢后叙赚,開啟一些定時(shí)任務(wù)

  • BrokerController.this.getBrokerStats().record();
    固化broker的狀態(tài)震叮,默認(rèn)1天執(zhí)行一次
  • BrokerController.this.consumerOffsetManager.persist();
    固化offset苇瓣,延遲10秒偿乖,每5秒執(zhí)行一次
  • BrokerController.this.consumerFilterManager.persist();
    Filter固化哲嘲,延遲10秒眠副,每10秒執(zhí)行一次
  • BrokerController.this.protectBroker();
    保護(hù)broker竣稽?后續(xù)完善毫别,延遲3分,每3分執(zhí)行一次
  • BrokerController.this.printWaterMark();
    打印流水信息台丛,發(fā)送恋博、拉取、查詢炼吴、結(jié)束事務(wù)消息等日志
    延遲10秒疫衩,每1秒一次
  • log.info("dispatch behind commit log {} bytes", BrokerController.this.getMessageStore().dispatchBehindBytes());
    打印日志:獲取已經(jīng)固化到commitlog,但是還沒有被消費(fèi)的日志的byte大小
    延遲10秒童芹,每60秒執(zhí)行一次
  • BrokerController.this.brokerOuterAPI.fetchNameServerAddr();
    如果fetchNamesrvAddrByAddressServer=true假褪,則會(huì)執(zhí)行
    主要是通過httpclient從給定的URL動(dòng)態(tài)獲取NameSrv的地址
    延遲10秒近顷,每120秒執(zhí)行一次
  • BrokerController.this.slaveSynchronize.syncAll();
    如果broker的角色是SLAVE,則會(huì)執(zhí)行窒升,主要是從主Broker定期同步topic饱须、offsetdelayOffset譬挚、group信息
    延遲10秒,每60秒執(zhí)行一次
  • BrokerController.this.printMasterAndSlaveDiff();
    如果broker的角色是不是SLAVE狠角,則會(huì)執(zhí)行丰歌,主要打印SLAVEMaster之間差異的byte大小

如果啟用了TLS安全傳輸配置立帖,則會(huì)啟動(dòng) fileWatchService悠砚?后續(xù)補(bǔ)充

最后調(diào)用了三個(gè)方法:

  • initialTransaction()
    初始化事務(wù)消息的一些服務(wù)及Listener
  • initialAcl();
    初始化ACL的一些服務(wù)灌旧,進(jìn)行訪問控制
  • initialRpcHooks();
    暫時(shí)不知道干啥的

到這里枢泰,controller.initialize()算是完成了,回顧一下窿克,其實(shí)思路很清晰:

  • 1毛甲、加載配置文件
  • 2玻募、啟動(dòng)Netty服務(wù)
  • 3七咧、初始化線程池
  • 4、啟動(dòng)定時(shí)任務(wù)
  • 5坑雅、其他的一些配置

3裹粤、start()

啟動(dòng)就比較直接了遥诉,首先啟動(dòng)一些服務(wù):

  • messageStore.start()
    消息固化服務(wù)啟動(dòng)
  • remotingServer.start()
    nettyServer啟動(dòng) 10911
  • fastRemotingServer.start()
    vip nettyServer啟動(dòng)矮锈,端口10909
  • fileWatchService.start();
    啟用TLS加密的服務(wù)啟動(dòng)
  • brokerOuterAPI.start();
    啟用動(dòng)態(tài)獲取NameSrv的服務(wù)啟動(dòng)
  • pullRequestHoldService.start();
    獲取請求的服務(wù)啟動(dòng)
  • clientHousekeepingService.start();
    啟動(dòng)
  • filterServerManager.start();
    過濾器啟動(dòng)
  • BrokerController.this.registerBrokerAll(true, false, brokerConfig.isForceRegister());
    定時(shí)任務(wù)债朵,從Namesrv獲取所有broker注冊的信息序芦,延遲10秒粤咪,每10秒或者registerNameServerPeriod指定的時(shí)間寥枝,但是不能少于10秒執(zhí)行一次
  • brokerStatsManager.start();
    broker狀態(tài)檢查啟動(dòng)囊拜,貌似啥也沒干
  • this.brokerFastFailure.start();
  • transactionalMessageCheckService.start();
    如果不是SLAVE艾疟,則會(huì)啟動(dòng)事務(wù)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末蔽莱,一起剝皮案震驚了整個(gè)濱河市盗冷,隨后出現(xiàn)的幾起案子仪糖,更是在濱河造成了極大的恐慌,老刑警劉巖攒驰,帶你破解...
    沈念sama閱讀 210,978評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件玻粪,死亡現(xiàn)場離奇詭異伦仍,居然都是意外死亡很洋,警方通過查閱死者的電腦和手機(jī)充蓝,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評論 2 384
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來喉磁,“玉大人谓苟,你說我怎么就攤上這事∠叨ǎ” “怎么了娜谊?”我有些...
    開封第一講書人閱讀 156,623評論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長斤讥。 經(jīng)常有香客問我纱皆,道長,這世上最難降的妖魔是什么芭商? 我笑而不...
    開封第一講書人閱讀 56,324評論 1 282
  • 正文 為了忘掉前任派草,我火速辦了婚禮,結(jié)果婚禮上近迁,老公的妹妹穿的比我還像新娘。我一直安慰自己搏存,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,390評論 5 384
  • 文/花漫 我一把揭開白布盖桥。 她就那樣靜靜地躺著藐握,像睡著了一般袜炕。 火紅的嫁衣襯著肌膚如雪乌助。 梳的紋絲不亂的頭發(fā)上仆葡,一...
    開封第一講書人閱讀 49,741評論 1 289
  • 那天腰涧,我揣著相機(jī)與錄音疗锐,去河邊找鬼敌买。 笑死聋庵,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的岛都。 我是一名探鬼主播臼疫,決...
    沈念sama閱讀 38,892評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了立倍?” 一聲冷哼從身側(cè)響起胜卤,我...
    開封第一講書人閱讀 37,655評論 0 266
  • 序言:老撾萬榮一對情侶失蹤舰攒,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體泽本,經(jīng)...
    沈念sama閱讀 44,104評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡冰抢,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年蕴轨,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,569評論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖煞抬,靈堂內(nèi)的尸體忽然破棺而出曙强,到底是詐尸還是另有隱情臀防,我是刑警寧澤笑窜,帶...
    沈念sama閱讀 34,254評論 4 328
  • 正文 年R本政府宣布认罩,位于F島的核電站劫拗,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,834評論 3 312
  • 文/蒙蒙 一毕籽、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧胀屿,春花似錦、人聲如沸房资。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,725評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至衡楞,卻和暖如春瘾境,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,950評論 1 264
  • 我被黑心中介騙來泰國打工慷暂, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留氧吐,地道東北人游盲。 一個(gè)月前我還...
    沈念sama閱讀 46,260評論 2 360
  • 正文 我出身青樓背桐,卻偏偏與公主長得像优烧,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子链峭,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,446評論 2 348