這篇文章主要介紹了RocketMQ有哪些特性,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

創(chuàng)新互聯(lián)服務(wù)項(xiàng)目包括陸良網(wǎng)站建設(shè)、陸良網(wǎng)站制作、陸良網(wǎng)頁制作以及陸良網(wǎng)絡(luò)營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,陸良網(wǎng)站推廣取得了明顯的社會效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到陸良省份的部分城市,未來相信會繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!
一 nameserver
相對來說,nameserver的穩(wěn)定性非常高。原因有二:
1 nameserver互相獨(dú)立,彼此沒有通信關(guān)系,單臺nameserver掛掉,不影響其他nameserver,即使全部掛掉,也不影響業(yè)務(wù)系統(tǒng)使用,這點(diǎn)類似于dubbo的zookeeper。
2 nameserver不會有頻繁的讀寫,所以性能開銷非常小,穩(wěn)定性很高。
二 broker
1 與nameserver關(guān)系
連接
單個(gè)broker和所有nameserver保持長連接
心跳
心跳間隔:每隔30秒( 此時(shí)間無法更改)向所有nameserver發(fā)送心跳,心跳包含了自身的topic配置信息。
心跳超時(shí):nameserver每隔10秒鐘( 此時(shí)間無法更改),掃描所有還存活的broker連接,若某個(gè)連接2分鐘內(nèi)( 當(dāng)前時(shí)間與最后更新時(shí)間差值超過2分鐘,此時(shí)間無法更改)沒有發(fā)送心跳數(shù)據(jù),則斷開連接。
斷開
時(shí)機(jī):broker掛掉;心跳超時(shí)導(dǎo)致nameserver主動關(guān)閉連接
動作:一旦連接斷開,nameserver會立即感知,更新topc與隊(duì)列的對應(yīng)關(guān)系,但不會通知生產(chǎn)者和消費(fèi)者
2 負(fù)載均衡
一個(gè)topic分布在多個(gè)broker上,一個(gè)broker可以配置多個(gè)topic,它們是多對多的關(guān)系。
如果某個(gè)topic消息量很大,應(yīng)該給它多配置幾個(gè)隊(duì)列,并且盡量多分布在不同broker上,減輕某個(gè)broker的壓力。
topic消息量都比較均勻的情況下,如果某個(gè)broker上的隊(duì)列越多,則該broker壓力越大。
3 可用性
由于消息分布在各個(gè)broker上,一旦某個(gè)broker宕機(jī),則該broker上的消息讀寫都會受到影響。所以rocketmq提供了master/slave的結(jié)構(gòu),salve定時(shí)從master同步數(shù)據(jù),如果master宕機(jī),則slave提供消費(fèi)服務(wù),但是不能寫入消息,此過程對應(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ù)來縮短時(shí)間。這個(gè)時(shí)間段內(nèi),發(fā)往該broker的消息都是失敗的,而且該broker的消息無法消費(fèi),因?yàn)榇藭r(shí)消費(fèi)者不知道該broker已經(jīng)掛掉。
消費(fèi)者得到master宕機(jī)通知后,轉(zhuǎn)向slave消費(fèi),但是slave不能保證master的消息100%都同步過來了,因此會有少量的消息丟失。但是消息最終不會丟的,一旦master恢復(fù),未同步過去的消息會被消費(fèi)掉。
4 可靠性
所有發(fā)往broker的消息,有同步刷盤和異步刷盤機(jī)制,總的來說,可靠性非常高
同步刷盤時(shí),消息寫入物理文件才會返回成功,因此非常可靠
異步刷盤時(shí),只有機(jī)器宕機(jī),才會產(chǎn)生消息丟失,broker掛掉可能會發(fā)生,但是機(jī)器宕機(jī)崩潰是很少發(fā)生的,除非突然斷電
5 消息清理
掃描間隔
默認(rèn)10秒,由broker配置參數(shù) cleanResourceInterval 決定
空間閾值
物理文件不能無限制的一直存儲在磁盤,當(dāng)磁盤空間達(dá)到閾值時(shí),不再接受消息,broker打印出日志,消息發(fā)送失敗,閾值為固定值85%
清理時(shí)機(jī)
默認(rèn)每天凌晨4點(diǎn),由broker配置參數(shù) deleteWhen決定;或者磁盤空間達(dá)到閾值
文件保留時(shí)長
默認(rèn)72小時(shí),由broker配置參數(shù) fileReservedTime 決定
6 讀寫性能
文件內(nèi)存映射方式操作文件,避免read/write系統(tǒng)調(diào)用和實(shí)時(shí)文件讀寫,性能非常高
永遠(yuǎn)一個(gè)文件在寫,其他文件在讀
順序?qū)懀S機(jī)讀
利用linux的sendfile機(jī)制,將消息內(nèi)容直接輸出到sokect管道,避免系統(tǒng)調(diào)用
7 系統(tǒng)特性
大內(nèi)存,內(nèi)存越大性能越高,否則系統(tǒng)swap會成為性能瓶頸
IO密集
cpu load高,使用率低,因?yàn)閏pu占用后,大部分時(shí)間在IO WAIT
磁盤可靠性要求高,為了兼顧安全和性能,采用RAID10陣列
磁盤讀取速度要求快,要求高轉(zhuǎn)速大容量磁盤
三 消費(fèi)者
1 與nameserver關(guān)系
連接
單個(gè)消費(fèi)者和一臺nameserver保持長連接,定時(shí)查詢topic配置信息,如果該nameserver掛掉,消費(fèi)者會自動連接下一個(gè)nameserver,直到有可用連接為止,并能自動重連。
心跳
與nameserver沒有心跳
輪詢時(shí)間
默認(rèn)情況下,消費(fèi)者每隔30秒從nameserver獲取所有topic的最新隊(duì)列情況,這意味著某個(gè)broker如果宕機(jī),客戶端最多要30秒才能感知。該時(shí)間由 DefaultMQPushConsumer的 pollNameServerInteval參數(shù)決定,可手動配置。
2 與broker關(guān)系
連接
單個(gè)消費(fèi)者和該消費(fèi)者關(guān)聯(lián)的所有broker保持長連接。
心跳
默認(rèn)情況下,消費(fèi)者每隔30秒向所有broker發(fā)送心跳, 該時(shí)間由 DefaultMQPushConsumer的 heartbeatBrokerInterval 參數(shù)決定,可手動配置。 broker每隔10秒鐘( 此時(shí)間無法更改 ),掃描所有還存活的連接,若某個(gè)連接2分鐘內(nèi)( 當(dāng)前時(shí)間與最后更新時(shí)間差值超過2分鐘,此時(shí)間無法更改 )沒有發(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主動關(guān)閉連接
動作:一旦連接斷開,broker會立即感知到,并向該消費(fèi)者分組的所有消費(fèi)者發(fā)出通知, 分組內(nèi)消費(fèi)者重新分配隊(duì)列繼續(xù)消費(fèi)
3 負(fù)載均衡
集群消費(fèi)模式下,一個(gè)消費(fèi)者集群多臺機(jī)器共同消費(fèi)一個(gè)topic的多個(gè)隊(duì)列,一個(gè)隊(duì)列只會被一個(gè)消費(fèi)者消費(fèi)。如果某個(gè)消費(fèi)者掛掉,分組內(nèi)其它消費(fèi)者會接替掛掉的消費(fèi)者繼續(xù)消費(fèi)。
4 消費(fèi)機(jī)制
本地隊(duì)列
消費(fèi)者不間斷的從broker拉取消息,消息拉取到本地隊(duì)列,然后本地消費(fèi)線程消費(fèi)本地消息隊(duì)列,只是一個(gè)異步過程,拉取線程不會等待本地消費(fèi)線程,這種模式實(shí)時(shí)性非常高。對消費(fèi)者對本地隊(duì)列有一個(gè)保護(hù),因此本地消息隊(duì)列不能無限大,否則可能會占用大量內(nèi)存,本地隊(duì)列大小由 DefaultMQPushConsumer的 pullThresholdForQueue屬性控制,默認(rèn)1000,可手動設(shè)置 。
輪詢間隔
消息拉取線程每隔多久拉取一次?間隔時(shí)間由 DefaultMQPushConsumer的 pullInterval 屬性控制,默認(rèn)為0,可手動設(shè)置。
消息消費(fèi)數(shù)量
監(jiān)聽器每次接受本地隊(duì)列的消息是多少條?這個(gè)參數(shù)由 DefaultMQPushConsumer的 consumeMessageBatchMaxSize 屬性控制,默認(rèn)為1,可手動設(shè)置。
5 消費(fèi)進(jìn)度存儲
每隔一段時(shí)間將各個(gè)隊(duì)列的消費(fèi)進(jìn)度存儲到對應(yīng)的broker上,該時(shí)間由 DefaultMQPushConsu mer的 persistConsumerOffsetInterval屬性控制,默認(rèn)為5秒,可手動設(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)者者和一臺nameserver保持長連接,定時(shí)查詢topic配置信息,如果該nameserver掛掉,生產(chǎn)者會自動連接下一個(gè)nameserver,直到有可用連接為止,并能自動重連。
輪詢時(shí)間
默認(rèn)情況下,生產(chǎn)者每隔30秒從nameserver獲取所有topic的最新隊(duì)列情況,這意味著某個(gè)broker如果宕機(jī),生產(chǎn)者最多要30秒才能感知,在此期間,發(fā)往該broker的消息發(fā)送失敗。該時(shí)間由 DefaultMQProducer 的 pollNameServerInteval參數(shù)決定,可手動配置。
心跳
與nameserver沒有心跳
2 與broker關(guān)系
連接
單個(gè)生產(chǎn)者和該生產(chǎn)者關(guān)聯(lián)的所有broker保持長連接。
心跳
默認(rèn)情況下,生產(chǎn)者每隔30秒向所有broker發(fā)送心跳,該時(shí)間由 DefaultMQProducer 的 heartbeatBrokerInterval 參數(shù)決定,可手動配置。broker每隔10秒鐘( 此時(shí)間無法更改),掃描所有還存活的連接,若某個(gè)連接2分鐘內(nèi)( 當(dāng)前時(shí)間與最后更新時(shí)間差值超過2分鐘,此時(shí)間無法更改)沒有發(fā)送心跳數(shù)據(jù),則關(guān)閉連接。
連接斷開
移除broker上的生產(chǎn)者信息
3 負(fù)載均衡
生產(chǎn)者時(shí)間沒有關(guān)系,每個(gè)生產(chǎn)者向隊(duì)列輪流發(fā)送消息
感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“RocketMQ有哪些特性”這篇文章對大家有幫助,同時(shí)也希望大家多多支持創(chuàng)新互聯(lián),關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,更多相關(guān)知識等著你來學(xué)習(xí)!
                新聞標(biāo)題:RocketMQ有哪些特性
                
                標(biāo)題URL:http://www.chinadenli.net/article20/pgseco.html
            
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供營銷型網(wǎng)站建設(shè)、網(wǎng)站營銷、網(wǎng)站收錄、定制開發(fā)、企業(yè)建站、品牌網(wǎng)站制作
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)