日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

          
              
          歡迎訪問(wèn) 生活随笔!

          生活随笔

          當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

          编程问答

          【转】RocketMQ的一些特性(生产者消费者配置参数的含义)

          發(fā)布時(shí)間:2023/12/10 编程问答 45 豆豆
          生活随笔 收集整理的這篇文章主要介紹了 【转】RocketMQ的一些特性(生产者消费者配置参数的含义) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
          一 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)連接。

          • 斷開(kāi)
          ? ? ?時(shí)機(jī):broker掛掉;心跳超時(shí)導(dǎo)致nameserver主動(dòng)關(guān)閉連接

          ? ? ?動(dòng)作:一旦連接斷開(kāi),nameserver會(huì)立即感知,更新topic與隊(duì)列的對(duì)應(yīng)關(guān)系,但不會(huì)通知生產(chǎn)者和消費(fèi)者

          ?

          2 負(fù)載均衡

          • 一個(gè)topic分布在多個(gè)broker上,一個(gè)broker可以配置多個(gè)topic,它們是多對(duì)多的關(guān)系。
          • 如果某個(gè)topic消息量很大,應(yīng)該給它多配置幾個(gè)隊(duì)列,并且盡量多分布在不同broker上,減輕某個(gè)broker的壓力。
          • topic消息量都比較均勻的情況下,如果某個(gè)broker上的隊(duì)列越多,則該broker壓力越大。

          ?

          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):

          • 一旦某個(gè)broker master宕機(jī),生產(chǎn)者和消費(fèi)者多久才能發(fā)現(xiàn)?受限于rocketmq的網(wǎng)絡(luò)連接機(jī)制,默認(rèn)情況下,最多需要30秒,但這個(gè)時(shí)間可由應(yīng)用設(shè)定參數(shù)來(lái)縮短時(shí)間。這個(gè)時(shí)間段內(nèi),發(fā)往該broker的消息都是失敗的,而且該broker的消息無(wú)法消費(fèi),因?yàn)榇藭r(shí)消費(fèi)者不知道該broker已經(jīng)掛掉。
          • 消費(fèi)者得到master宕機(jī)通知后,轉(zhuǎn)向slave消費(fèi),但是slave不能保證master的消息100%都同步過(guò)來(lái)了,因此會(huì)有少量的消息丟失。但是消息最終不會(huì)丟的,一旦master恢復(fù),未同步過(guò)去的消息會(huì)被消費(fèi)掉。

          ?

          4 可靠性

          • 所有發(fā)往broker的消息,有同步刷盤(pán)和異步刷盤(pán)機(jī)制,總的來(lái)說(shuō),可靠性非常高
          • 同步刷盤(pán)時(shí),消息寫(xiě)入物理文件才會(huì)返回成功,因此非??煽?/li>
          • 異步刷盤(pán)時(shí),只有機(jī)器宕機(jī),才會(huì)產(chǎn)生消息丟失,broker掛掉可能會(huì)發(fā)生,但是機(jī)器宕機(jī)崩潰是很少發(fā)生的,除非突然斷電

          5 消息清理

          • 掃描間隔

          ? ? ?默認(rèn)10秒,由broker配置參數(shù)cleanResourceInterval決定

          • 空間閾值

          ? ? ?物理文件不能無(wú)限制的一直存儲(chǔ)在磁盤(pán),當(dāng)磁盤(pán)空間達(dá)到閾值時(shí),不再接受消息,broker打印出日志,消息發(fā)送失敗,閾值為固定值85%

          • 清理時(shí)機(jī)

          ? ? ?默認(rèn)每天凌晨4點(diǎn),由broker配置參數(shù)deleteWhen決定;或者磁盤(pán)空間達(dá)到閾值

          • 文件保留時(shí)長(zhǎng)

          ? ? ?默認(rèn)72小時(shí),由broker配置參數(shù)fileReservedTime決定

          ?

          ?

          6 讀寫(xiě)性能

          • 文件內(nèi)存映射方式操作文件,避免read/write系統(tǒng)調(diào)用和實(shí)時(shí)文件讀寫(xiě),性能非常高
          • 永遠(yuǎn)一個(gè)文件在寫(xiě),其他文件在讀
          • 順序?qū)?#xff0c;隨機(jī)讀
          • 利用linux的sendfile機(jī)制,將消息內(nèi)容直接輸出到socket管道,避免系統(tǒng)調(diào)用

          7 系統(tǒng)特性

          • 大內(nèi)存,內(nèi)存越大性能越高,否則系統(tǒng)swap會(huì)成為性能瓶頸
          • IO密集
          • cpu load高,使用率低,因?yàn)閏pu占用后,大部分時(shí)間在IO WAIT
          • 磁盤(pán)可靠性要求高,為了兼顧安全和性能,采用RAID10陣列
          • 磁盤(pán)讀取速度要求快,要求高轉(zhuǎn)速大容量磁盤(pán)

          ?

          三 消費(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)有心跳

          • 輪詢時(shí)間

          默認(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)

          • 斷開(kā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ī)制

          • 本地隊(duì)列

          ? ? ? ? 消費(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è)置。

          • 輪詢間隔
          ? ? ?消息拉取線程每隔多久拉取一次?間隔時(shí)間由DefaultMQPushConsumer的pullInterval屬性控制,默認(rèn)為0,可手動(dòng)設(shè)置。
          • 消息消費(fèi)數(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)重連。

          • 輪詢時(shí)間

          默認(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)閉連接。

          • 連接斷開(kāi)

          移除broker上的生產(chǎn)者信息

          ?

          3 負(fù)載均衡

          ? ? ?生產(chǎn)者時(shí)間沒(méi)有關(guān)系,每個(gè)生產(chǎn)者向隊(duì)列輪流發(fā)送消息

          總結(jié)

          以上是生活随笔為你收集整理的【转】RocketMQ的一些特性(生产者消费者配置参数的含义)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

          如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。