日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

三分鐘白話RocketMQ系列—— 如何保證消息順序性

來源: 責編: 時間:2023-09-21 20:48:20 287觀看
導(dǎo)讀關(guān)鍵字摘要全局有序局部有序局部有序能一直有序嗎順序消息的限制Q1:什么是全局有序?如何實現(xiàn)全局有序?適用于性能要求不高,所有的消息嚴格按照先進先出(FIFO)的原則來發(fā)布和消費的場景。例如,在證券處理中,以人民幣兌換美元為

wYj28資訊網(wǎng)——每日最新資訊28at.com

關(guān)鍵字摘要

  • 全局有序
  • 局部有序
  • 局部有序能一直有序嗎
  • 順序消息的限制

Q1:什么是全局有序?如何實現(xiàn)全局有序?

適用于性能要求不高,所有的消息嚴格按照先進先出(FIFO)的原則來發(fā)布和消費的場景。wYj28資訊網(wǎng)——每日最新資訊28at.com

例如,在證券處理中,以人民幣兌換美元為Topic,在價格相同的情況下,先出價者優(yōu)先處理,則可以按照FIFO的方式發(fā)布和消費全局順序消息。wYj28資訊網(wǎng)——每日最新資訊28at.com

要實現(xiàn)全局有序,必須控制Topic只有一個隊列queue,才能實現(xiàn)全局有序。wYj28資訊網(wǎng)——每日最新資訊28at.com

由于只有一個隊列存在,這種方式雖然保證了全局有序,但是性能不高,無法擴展。wYj28資訊網(wǎng)——每日最新資訊28at.com

Q2:什么是局部有序?如何實現(xiàn)局部有序?

適用于性能要求高,以Sharding Key作為分區(qū)字段,在同一個隊列queue中嚴格地按照FIFO原則進行消息發(fā)布和消費的場景。wYj28資訊網(wǎng)——每日最新資訊28at.com

例如,用戶注冊需要發(fā)送發(fā)驗證碼,以用戶ID作為Sharding Key,那么同一個用戶發(fā)送的消息都會按照發(fā)布的先后順序來消費。wYj28資訊網(wǎng)——每日最新資訊28at.com

保證「消息生產(chǎn)」的順序性,則必須滿足以下條件:wYj28資訊網(wǎng)——每日最新資訊28at.com

  • 單一生產(chǎn)者:消息生產(chǎn)的順序性僅支持單一生產(chǎn)者,不同生產(chǎn)者分布在不同的系統(tǒng),即使設(shè)置相同的分區(qū)鍵,不同生產(chǎn)者之間產(chǎn)生的消息也無法判定其先后順序。
  • 串行發(fā)送:生產(chǎn)者客戶端支持多線程安全訪問,但如果生產(chǎn)者使用多線程并行發(fā)送,則不同線程間產(chǎn)生的消息將無法判定其先后順序。

滿足以上條件的生產(chǎn)者,將 「順序消息」 發(fā)送至服務(wù)端后,會保證設(shè)置了同一分區(qū)鍵的消息,按照發(fā)送順序存儲在同一隊列中。wYj28資訊網(wǎng)——每日最新資訊28at.com

wYj28資訊網(wǎng)——每日最新資訊28at.com

局部有序(分區(qū)有序)wYj28資訊網(wǎng)——每日最新資訊28at.com

注意,在RocketMQ 5.x版本中,新增了「消息組」概念,順序消息發(fā)送必須要設(shè)置消息組。wYj28資訊網(wǎng)——每日最新資訊28at.com

保證「消息消費」的順序性,則必須滿足以下條件:wYj28資訊網(wǎng)——每日最新資訊28at.com

  • 語義正確。業(yè)務(wù)方消費消息時需要嚴格按照 接收---處理---應(yīng)答 的語義處理消息,避免因異步處理導(dǎo)致消息亂序。
  • 有限重試。順序消息消費投遞次數(shù)限定有限范圍內(nèi),即一條消息如果超過最大重試次數(shù)后,將跳過這條消息消費,不會一直阻塞后續(xù)消息處理。

對于需要嚴格保證消費順序的場景,請務(wù)必設(shè)置合理的重試次數(shù),避免參數(shù)不合理導(dǎo)致消息亂序。wYj28資訊網(wǎng)——每日最新資訊28at.com

Q3:如果Broker掉線,局部有序還能保持有序嗎?

如果一個Broker掉線,那么此時隊列總數(shù)是否會發(fā)化?wYj28資訊網(wǎng)——每日最新資訊28at.com

如果發(fā)生變化,那么同一個 ShardingKey 的消息就會發(fā)送到不同的隊列上,造成亂序。wYj28資訊網(wǎng)——每日最新資訊28at.com

如果不發(fā)生變化,那消息將會發(fā)送到掉線Broker的隊列上,必然是失敗的。wYj28資訊網(wǎng)——每日最新資訊28at.com

因此 Apache RocketMQ 提供了兩種模式,如果要保證嚴格順序而不是可用性,創(chuàng)建 Topic 是要指定 -o 參數(shù)(--order)為true,表示順序消息:wYj28資訊網(wǎng)——每日最新資訊28at.com

$ sh bin/mqadmin updateTopic -c DefaultCluster -t TopicTest -o true -n 127.0.0.1:9876create topic to 127.0.0.1:10911 success.TopicConfig [topicName=TopicTest, readQueueNums=8, writeQueueNums=8, perm=RW-, topicFilterType=SINGLE_TAG, topicSysFlag=0, order=true, attributes=null]

其次,要保證NameServer中的配置 orderMessageEnable 和 returnOrderTopicConfigToBroker 必須是 true。wYj28資訊網(wǎng)——每日最新資訊28at.com

如果上述任意一個條件不滿足,則是保證可用性而不是嚴格順序。wYj28資訊網(wǎng)——每日最新資訊28at.com

Q4: 順序消息有哪些限制?

同一條消息是否可以既是順序消息,又是定時消息和事務(wù)消息?wYj28資訊網(wǎng)——每日最新資訊28at.com

不可以。順序消息、定時消息、事務(wù)消息是不同的消息類型,三者是互斥關(guān)系,不能疊加在一起使用。wYj28資訊網(wǎng)——每日最新資訊28at.com

為什么全局順序消息性能一般?wYj28資訊網(wǎng)——每日最新資訊28at.com

全局順序消息是嚴格按照FIFO的消息阻塞原則,即上一條消息沒有被成功消費,那么下一條消息會一直被存儲到Topic隊列中。wYj28資訊網(wǎng)——每日最新資訊28at.com

關(guān)鍵字總結(jié)

  • 全局有序:必須控制Topic只有一個隊列queue,才能實現(xiàn)全局有序,性能一般。
  • 局部有序:性能較好,需要確保「生產(chǎn)有序」和「消費有序」,同時注意Broker掉線時的 可用性 與 有序性 權(quán)衡。

本文鏈接:http://www.www897cc.com/showinfo-26-10904-0.html三分鐘白話RocketMQ系列—— 如何保證消息順序性

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 實用!Python數(shù)據(jù)去重與唯一值提取:高效整理數(shù)據(jù)

下一篇: 什么是 Merge Queue,為什么要使用它?

標簽:
  • 熱門焦點
Top 主站蜘蛛池模板: 长沙县| 称多县| 嵊泗县| 庐江县| 肇庆市| 隆德县| 富川| 德州市| 黄梅县| 汶川县| 定陶县| 米脂县| 灵璧县| 阿勒泰市| 志丹县| 平安县| 云龙县| 莎车县| 土默特左旗| 钟山县| 胶州市| 永兴县| 巴林右旗| 灵武市| 六枝特区| 鹤壁市| 永新县| 昆山市| 迁安市| 岐山县| 富民县| 龙海市| 浠水县| 石河子市| 富阳市| 岳阳市| 延吉市| 随州市| 奉新县| 青阳县| 洪泽县|