主頁 >  其他 > 詳解RocketMQ 順序消費機制

詳解RocketMQ 順序消費機制

2023-05-31 08:17:16 其他

摘要:順序訊息是指對于一個指定的 Topic ,訊息嚴格按照先進先出(FIFO)的原則進行訊息發布和消費,即先發布的訊息先消費,后發布的訊息后消費,

本文分享自華為云社區《RocketMQ 順序消費機制》,作者: 勇哥java實戰分享 ,

順序訊息是指對于一個指定的 Topic ,訊息嚴格按照先進先出(FIFO)的原則進行訊息發布和消費,即先發布的訊息先消費,后發布的訊息后消費,

順序訊息分為磁區順序訊息和全域順序訊息,

1、磁區順序訊息

對于指定的一個 Topic ,所有訊息根據 Sharding Key 進行區塊磁區,同一個磁區內的訊息按照嚴格的先進先出(FIFO)原則進行發布和消費,同一磁區內的訊息保證順序,不同磁區之間的訊息順序不做要求,

  • 適用場景:適用于性能要求高,以 Sharding Key 作為磁區欄位,在同一個區塊中嚴格地按照先進先出(FIFO)原則進行訊息發布和消費的場景,
  • 示例:電商的訂單創建,以訂單 ID 作為 Sharding Key ,那么同一個訂單相關的創建訂單訊息、訂單支付訊息、訂單退款訊息、訂單物流訊息都會按照發布的先后順序來消費,

2、全域順序訊息

對于指定的一個 Topic ,所有訊息按照嚴格的先入先出(FIFO)的順序來發布和消費,

  • 適用場景:適用于性能要求不高,所有的訊息嚴格按照 FIFO 原則來發布和消費的場景,
  • 示例:在證券處理中,以人民幣兌換美元為 Topic,在價格相同的情況下,先出價者優先處理,則可以按照 FIFO 的方式發布和消費全域順序訊息,

全域順序訊息實際上是一種特殊的磁區順序訊息,即 Topic 中只有一個磁區,因此全域順序和磁區順序的實作原理相同,

因為磁區順序訊息有多個磁區,所以磁區順序訊息比全域順序訊息的并發度和性能更高,

訊息的順序需要由兩個階段保證:

  • 訊息發送

如上圖所示,A1、B1、A2、A3、B2、B3 是訂單 A 和訂單 B 的訊息產生的順序,業務上要求同一訂單的訊息保持順序,例如訂單 A 的訊息發送和消費都按照 A1、A2、A3 的順序,

如果是普通訊息,訂單A 的訊息可能會被輪詢發送到不同的佇列中,不同佇列的訊息將無法保持順序,而順序訊息發送時 RocketMQ 支持將 Sharding Key 相同(例如同一訂單號)的訊息序路由到一個佇列中,

  • 訊息消費

消費者消費訊息時,需要保證訊息消費順序和存盤順序一致,最終實作消費順序和發布順序的一致,

我們知道負載均衡服務是客戶端開始消費的起點,在負載均衡階段,并發消費和順序消費并沒有什么大的差別,最大的差別在于:向 Borker 申請鎖 ,

消費者根據分配的佇列 messageQueue ,向 Borker 申請鎖 ,如果申請成功,則會拉取訊息,如果失敗,則定時任務每隔20秒會重新嘗試,

見上圖,順序消費核心流程如下:

1、 組裝成消費物件

2、 將請求物件提交到消費執行緒池

和并發消費不同的是,這里的消費請求包含消費快照 processQueue ,訊息佇列 messageQueue 兩個物件,并不對訊息串列做任何處理,

3、 消費執行緒內,對消費佇列加鎖

4、 從消費快照中取得待消費的訊息串列

消費快照 processQueue 物件里,創建了一個紅黑樹物件 consumingMsgOrderlyTreeMap 用于臨時存盤的待消費的訊息,

5、 執行訊息監聽器

執行監聽器邏輯容易理解,消費快照的消費鎖 consumeLock的作用是:防止 Rebalance 執行緒把當前消費的 MessageQueue 物件移除掉,

6、 處理消費結果

消費成功時,首先計算需要提交的偏移量,然后更新本地消費進度,

消費失敗時,分兩種場景:

  • 假如已消費次數小于最大重試次數,則將放入物件 consumingMsgOrderlyTreeMap 用例臨時存盤的待消費的訊息,重新加入到消費快照紅黑樹msgTreeMap中,然后使用定時任務嘗試重新消費,
  • 假如已消費次數大于等于最大重試次數,則將失敗訊息發送到 Broker ,Broker 接收到訊息后,會加入到死信佇列里 , 最后計算需要提交的偏移量,然后更新本地消費進度,

我們做一個關于順序消費的總結:

  1. 順序消費需要由兩個階段訊息發送訊息消費協同配合,底層支撐依靠的是 RocketMQ 的存盤模型;
  2. 順序消費服務啟動后,通過三把鎖的機制,訊息佇列 messageQueue 的資料都會被消費者實體單執行緒的執行消費;
  3. 假如消費者擴容,消費者重啟,或者 Broker 宕機 ,順序消費也會有一定幾率較短時間內亂序,所以消費者的業務邏輯還是要保障冪等

 

點擊關注,第一時間了解華為云新鮮技術~

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/553841.html

標籤:其他

上一篇:直播原始碼平臺搭建技術分享之直播短信功能

下一篇:返回列表

標籤雲
其他(160005) Python(38189) JavaScript(25464) Java(18161) C(15234) 區塊鏈(8268) C#(7972) AI(7469) 爪哇(7425) MySQL(7217) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5873) 数组(5741) R(5409) Linux(5344) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4579) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2434) ASP.NET(2403) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) .NET技术(1977) 功能(1967) Web開發(1951) HtmlCss(1950) C++(1927) python-3.x(1918) 弹簧靴(1913) xml(1889) PostgreSQL(1878) .NETCore(1862) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 詳解RocketMQ 順序消費機制

    摘要:順序訊息是指對于一個指定的 Topic ,訊息嚴格按照先進先出(FIFO)的原則進行訊息發布和消費,即先發布的訊息先消費,后發布的訊息后消費。 本文分享自華為云社區《RocketMQ 順序消費機制》,作者: 勇哥java實戰分享 。 順序訊息是指對于一個指定的 Topic ,訊息嚴格按照先進先 ......

    uj5u.com 2023-05-31 08:17:16 more
  • 直播原始碼平臺搭建技術分享之直播短信功能

    在利用直播原始碼去開發平臺中,直播原始碼功能技術是開發直播平臺的重要技術之一,今天我就為大家分享直播原始碼平臺搭建技術分享直播短信功能實作。 ......

    uj5u.com 2023-05-31 08:16:52 more
  • 5年測驗工程師經歷,下一步轉開發還是繼續測驗?

    測驗五年,沒有積累編程腳本能力和自動化經驗,找作業時都要求語言能力,自動化框架。
    感覺開發同事積累的經歷容易找作業。
    下一步,想辦法轉開發崗還是繼續測驗???
    正常情況下,有了四年的測驗工程師經歷,應該可以達到中級測驗工程師的水平了。作為一個初中級測驗工程師下一步是轉開發還是繼續做測驗,個人建議是做... ......

    uj5u.com 2023-05-31 08:16:12 more
  • 安全測驗實踐-萬家APP越權邏輯漏洞挖掘

    邏輯漏洞會導致業務面臨著巨大的經濟損失隱患與敏感資料泄露的風險,本文從安全測驗的角度,以越權邏輯漏洞為例,介紹邏輯漏洞的挖掘方法和實踐程序。 ......

    uj5u.com 2023-05-31 08:16:00 more
  • OWASP移動應用安全測驗指南中文版

    OWASP移動應用安全測驗指南(MASTG)是OWASP移動應用安全(MAS)旗艦專案的一部分,是一本涵蓋移動應用安全分析程序、技術和工具的綜合手冊,也是一套詳盡的測驗案例,用于驗證OWASP移動應用安全驗證標準(MASVS)中列出的要求,為完整和一致的安全測驗提供一個基線。 OWASP MASVS ......

    uj5u.com 2023-05-31 08:15:44 more
  • Kali滲透Windows服務器

    這個實驗主要讓我們學習漏洞掃描技識訓本原理,了解其在網路攻防中的作用,掌握使用Kali中的Metasploit對目標主機滲透,并根據報告做出相應的防護措施。 ......

    uj5u.com 2023-05-31 08:15:20 more
  • 輔助測驗和研發人員的一款小插件【資料安全】

    ## 一、為什么要做一款這樣的小插件 資料,一直在思考如何讓資料更安全的流轉和服務于客戶,圍繞這樣的想法,我們做過許多方面的擴展。我們落地了服務端的資料切片支持場景化的設計,實作了基于JDBC協議對SQL的攔截與切片,實作了在應用層的全鏈路資料庫審計方案和實作,實作了WEB端明暗水印和檔案水印等等, ......

    uj5u.com 2023-05-31 08:15:03 more
  • 【智能軟體安全】上海道寧為您帶來智能軟體安全平臺——?Veracod

    Veracode可以全面地 保護您構建和管理地應用程式 在現代軟體 開發生命周期的 每個階段不斷發現并修復缺陷 Veracode通過 建立一種在安全和開發團隊之間 架起橋梁并授權 開發人員成為 安全倡導者的積極文化 從一開始就防止常見的安全漏洞 開發商介紹 Veracode成立于2006年,起初是一 ......

    uj5u.com 2023-05-31 08:14:50 more
  • 隱私合規相關法律法規合集

    01中華人民共和國網路安全法(全文)201611.pdf 02資訊安全技術 個人資訊安全規范GB:T 35273—2017.pdf 03開展App違法違規收集使用個人資訊專項治理-中共中央網路安全和資訊化委員會辦公室201901.pdf 04App違法違規收集使用個人資訊自評估指南201903.pd ......

    uj5u.com 2023-05-31 08:14:38 more
  • 2.5. 多載與覆寫

    在 Java 中,方法的多載(Overloading)和覆寫(Overriding)是兩個重要的概念。它們都涉及到方法的定義與使用,但作用和規則有所不同。 #### 多載(Overloading) 多載是指在同一個類中定義多個同名的方法,但它們的引數串列不同(引數的個數、型別或順序不同)。多載允許我 ......

    uj5u.com 2023-05-31 08:14:28 more