【转】RocketMQ的一些特性(生产者消费者配置参数的含义)
| 一 nameserver 相對(duì)來(lái)說(shuō),nameserver的穩(wěn)定性非常高。原因有二: 1 nameserver互相獨(dú)立,彼此沒(méi)有通信關(guān)系,單臺(tái)nameserver掛掉,不影響其他nameserver,即使全部掛掉,也不影響業(yè)務(wù)系統(tǒng)使用,這點(diǎn)類(lèi)似于dubbo的zookeeper。 2 nameserver不會(huì)有頻繁的讀寫(xiě),所以性能開(kāi)銷(xiāo)非常小,穩(wěn)定性很高。 二 broker 1 與nameserver關(guān)系
? ? ?單個(gè)broker和所有nameserver保持長(zhǎng)連接
? ? ?心跳間隔:每隔30秒(此時(shí)間無(wú)法更改)向所有nameserver發(fā)送心跳,心跳包含了自身的topic配置信息。 ? ? ?心跳超時(shí):nameserver每隔10秒鐘(此時(shí)間無(wú)法更改),掃描所有還存活的broker連接,若某個(gè)連接2分鐘內(nèi)(當(dāng)前時(shí)間與最后更新時(shí)間差值超過(guò)2分鐘,此時(shí)間無(wú)法更改)沒(méi)有發(fā)送心跳數(shù)據(jù),則斷開(kāi)連接。
? ? ?動(dòng)作:一旦連接斷開(kāi),nameserver會(huì)立即感知,更新topic與隊(duì)列的對(duì)應(yīng)關(guān)系,但不會(huì)通知生產(chǎn)者和消費(fèi)者 ? 2 負(fù)載均衡
? 3 可用性 ? ?由于消息分布在各個(gè)broker上,一旦某個(gè)broker宕機(jī),則該broker上的消息讀寫(xiě)都會(huì)受到影響。所以rocketmq提供了master/slave的結(jié)構(gòu),salve定時(shí)從master同步數(shù)據(jù),如果master宕機(jī),則slave提供消費(fèi)服務(wù),但是不能寫(xiě)入消息,此過(guò)程對(duì)應(yīng)用透明,由rocketmq內(nèi)部解決。 這里有兩個(gè)關(guān)鍵點(diǎn):
? 4 可靠性
5 消息清理
? ? ?默認(rèn)10秒,由broker配置參數(shù)cleanResourceInterval決定
? ? ?物理文件不能無(wú)限制的一直存儲(chǔ)在磁盤(pán),當(dāng)磁盤(pán)空間達(dá)到閾值時(shí),不再接受消息,broker打印出日志,消息發(fā)送失敗,閾值為固定值85%
? ? ?默認(rèn)每天凌晨4點(diǎn),由broker配置參數(shù)deleteWhen決定;或者磁盤(pán)空間達(dá)到閾值
? ? ?默認(rèn)72小時(shí),由broker配置參數(shù)fileReservedTime決定 ? ? 6 讀寫(xiě)性能
7 系統(tǒng)特性
? 三 消費(fèi)者 1 與nameserver關(guān)系
? ? ?單個(gè)消費(fèi)者和一臺(tái)nameserver保持長(zhǎng)連接,定時(shí)查詢topic配置信息,如果該nameserver掛掉,消費(fèi)者會(huì)自動(dòng)連接下一個(gè)nameserver,直到有可用連接為止,并能自動(dòng)重連。
與nameserver沒(méi)有心跳
默認(rèn)情況下,消費(fèi)者每隔30秒從nameserver獲取所有topic的最新隊(duì)列情況,這意味著某個(gè)broker如果宕機(jī),客戶端最多要30秒才能感知。該時(shí)間由DefaultMQPushConsumer的pollNameServerInteval參數(shù)決定,可手動(dòng)配置。 ? 2 與broker關(guān)系
單個(gè)消費(fèi)者和該消費(fèi)者關(guān)聯(lián)的所有broker保持長(zhǎng)連接。
默認(rèn)情況下,消費(fèi)者每隔30秒向所有broker發(fā)送心跳,該時(shí)間由DefaultMQPushConsumer的heartbeatBrokerInterval參數(shù)決定,可手動(dòng)配置。broker每隔10秒鐘(此時(shí)間無(wú)法更改),掃描所有還存活的連接,若某個(gè)連接2分鐘內(nèi)(當(dāng)前時(shí)間與最后更新時(shí)間差值超過(guò)2分鐘,此時(shí)間無(wú)法更改)沒(méi)有發(fā)送心跳數(shù)據(jù),則關(guān)閉連接,并向該消費(fèi)者分組的所有消費(fèi)者發(fā)出通知,分組內(nèi)消費(fèi)者重新分配隊(duì)列繼續(xù)消費(fèi)
時(shí)機(jī):消費(fèi)者掛掉;心跳超時(shí)導(dǎo)致broker主動(dòng)關(guān)閉連接 動(dòng)作:一旦連接斷開(kāi),broker會(huì)立即感知到,并向該消費(fèi)者分組的所有消費(fèi)者發(fā)出通知,分組內(nèi)消費(fèi)者重新分配隊(duì)列繼續(xù)消費(fèi) ? 3 負(fù)載均衡 集群消費(fèi)模式下,一個(gè)消費(fèi)者集群多臺(tái)機(jī)器共同消費(fèi)一個(gè)topic的多個(gè)隊(duì)列,一個(gè)隊(duì)列只會(huì)被一個(gè)消費(fèi)者消費(fèi)。如果某個(gè)消費(fèi)者掛掉,分組內(nèi)其它消費(fèi)者會(huì)接替掛掉的消費(fèi)者繼續(xù)消費(fèi)。 4 消費(fèi)機(jī)制
? ? ? ? 消費(fèi)者不間斷的從broker拉取消息,消息拉取到本地隊(duì)列,然后本地消費(fèi)線程消費(fèi)本地消息隊(duì)列,只是一個(gè)異步過(guò)程,拉取線程不會(huì)等待本地消費(fèi)線程,這種模式實(shí)時(shí)性非常高。對(duì)消費(fèi)者對(duì)本地隊(duì)列有一個(gè)保護(hù),因此本地消息隊(duì)列不能無(wú)限大,否則可能會(huì)占用大量?jī)?nèi)存,本地隊(duì)列大小由DefaultMQPushConsumer的pullThresholdForQueue屬性控制,默認(rèn)1000,可手動(dòng)設(shè)置。
? ? ?監(jiān)聽(tīng)器每次接受本地隊(duì)列的消息是多少條?這個(gè)參數(shù)由DefaultMQPushConsumer的consumeMessageBatchMaxSize屬性控制,默認(rèn)為1,可手動(dòng)設(shè)置。 ? 5 消費(fèi)進(jìn)度存儲(chǔ) ? ? ?每隔一段時(shí)間將各個(gè)隊(duì)列的消費(fèi)進(jìn)度存儲(chǔ)到對(duì)應(yīng)的broker上,該時(shí)間由DefaultMQPushConsumer的persistConsumerOffsetInterval屬性控制,默認(rèn)為5秒,可手動(dòng)設(shè)置。 ? 6 如果一個(gè)topic在某broker上有3個(gè)隊(duì)列,一個(gè)消費(fèi)者消費(fèi)這3個(gè)隊(duì)列,那么該消費(fèi)者和這個(gè)broker有幾個(gè)連接? ? ? ?一個(gè)連接,消費(fèi)單位與隊(duì)列相關(guān),消費(fèi)連接只跟broker相關(guān),事實(shí)上,消費(fèi)者將所有隊(duì)列的消息拉取任務(wù)放到本地的隊(duì)列,挨個(gè)拉取,拉取完畢后,又將拉取任務(wù)放到隊(duì)尾,然后執(zhí)行下一個(gè)拉取任務(wù) ? ? 四 生產(chǎn)者 1 與nameserver關(guān)系
? ? ?單個(gè)生產(chǎn)者者和一臺(tái)nameserver保持長(zhǎng)連接,定時(shí)查詢topic配置信息,如果該nameserver掛掉,生產(chǎn)者會(huì)自動(dòng)連接下一個(gè)nameserver,直到有可用連接為止,并能自動(dòng)重連。
默認(rèn)情況下,生產(chǎn)者每隔30秒從nameserver獲取所有topic的最新隊(duì)列情況,這意味著某個(gè)broker如果宕機(jī),生產(chǎn)者最多要30秒才能感知,在此期間,發(fā)往該broker的消息發(fā)送失敗。該時(shí)間由DefaultMQProducer的pollNameServerInteval參數(shù)決定,可手動(dòng)配置。
與nameserver沒(méi)有心跳 ? 2 與broker關(guān)系
單個(gè)生產(chǎn)者和該生產(chǎn)者關(guān)聯(lián)的所有broker保持長(zhǎng)連接。
默認(rèn)情況下,生產(chǎn)者每隔30秒向所有broker發(fā)送心跳,該時(shí)間由DefaultMQProducer的heartbeatBrokerInterval參數(shù)決定,可手動(dòng)配置。broker每隔10秒鐘(此時(shí)間無(wú)法更改),掃描所有還存活的連接,若某個(gè)連接2分鐘內(nèi)(當(dāng)前時(shí)間與最后更新時(shí)間差值超過(guò)2分鐘,此時(shí)間無(wú)法更改)沒(méi)有發(fā)送心跳數(shù)據(jù),則關(guān)閉連接。
移除broker上的生產(chǎn)者信息 ? 3 負(fù)載均衡? ? ?生產(chǎn)者時(shí)間沒(méi)有關(guān)系,每個(gè)生產(chǎn)者向隊(duì)列輪流發(fā)送消息 |
總結(jié)
以上是生活随笔為你收集整理的【转】RocketMQ的一些特性(生产者消费者配置参数的含义)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: AMD锐龙处理器装Win11:终于完美了
- 下一篇: 【转】阿里技术专家详解DDD系列 第二讲