主頁 >  其他 > MQ那點破事,訊息丟失、重復消費、消費順序、堆積、事務、高可用....

MQ那點破事,訊息丟失、重復消費、消費順序、堆積、事務、高可用....

2021-12-20 07:13:30 其他

精彩文章匯總 GitHub https://github.com/aalansehaiyang/technology-talk ,Star 12K
匯總java生態圈常用技術框架、開源中間件,系統架構、資料庫、大公司架構案例、常用三方類別庫、專案管理、線上問題排查、個人成長、思考等知識

大家好,我是Tom哥~

阿里P7技術專家,一個不喜歡內卷的程式員~

馬上要開啟國慶小長假了,祝大家節日快樂,吃喝玩樂走起~

為了便于大家查找問題,了解全貌,整理個目錄,我們可以快速全域了解關于訊息佇列,面試官一般會問哪些問題,

本篇文章的目錄:

訊息佇列的應用場景?

答案:1、異步處理 2、流量削峰填谷 3、應用解耦 4、訊息通訊

  • 異步處理,將一個請求鏈路中的非核心流程,拆分出來,異步處理,減少主流程鏈路的處理邏輯,縮短RT,提升吞吐量,如:注冊新用戶發短信通知,

  • 削峰填谷,避免流量暴漲,打垮下游系統,前面會加個訊息佇列,平滑流量沖擊,比如:秒殺活動,生活中像電源配接器也是這個原理,

  • 應用解耦,兩個應用,通過訊息系統間接建立關系,避免一個系統宕機后對另一個系統的影響,提升系統的可用性,如:下單異步扣減庫存

  • 訊息通訊,內置了高效的通信機制,可用于訊息通訊,如:點對點訊息佇列、聊天室,

常用的訊息框架有哪些?

答案:ActiveMQ,RabbitMQ,ZeroMQ,Kafka,MetaQ,RocketMQ、Pulsar 等

MQ技術選型?

答案:對比了 Kafka、RocketMQ 、Pulsar 三個框架,時耗、吞吐量、可靠性、事務、副本同步策略、多租戶、動態擴容、故障恢復等評估指標,詳細內容,參考 為什么放棄Kafka,選擇Pulsar?

訊息模型有哪些?

答案:1、點對點模式 2、發布/訂閱模式

如何保證 MQ 訊息不丟失?

答案:在了解訊息中間件的運作模式后,主要從三個方面來考慮這個問題:

  • 1、生產端,不丟失訊息

  • 2、MQ服務端,存盤本身不丟失訊息

  • 3、消費端,不丟失訊息

  • 詳細內容,參考 硬核 | Kafka 如何解決訊息不丟失?

如何解決訊息的重復消費?

答案:生產端為了保證訊息發送成功,可能會重復推送(直到收到成功ACK),會產生重復訊息,但是一個成熟的MQ Server框架一般會想辦法解決,避免存盤重復訊息(比如:空間換時間,存盤已處理過的message_id),給生產端提供一個冪等性的發送訊息介面,

但是消費端卻無法根本解決這個問題,在高并發標準要求下,拉取訊息+業務處理+提交消費位移需要做事務處理,另外消費端服務可能宕機,很可能會拉取到重復訊息,

所以,只能業務端自己做控制,對于已經消費成功的訊息,本地資料庫表或Redis快取業務標識,每次處理前先進行校驗,保證冪等,

如何保證 MQ訊息是有序的?

答案:有些業務有背景關系要求,比如:電商行業的下單、付款、發貨、確認識訓,每個環節都會發送訊息,而消費端拉取并消費訊息時,也是希望按正常的狀態機流程進行,所以對訊息就有了順序要求,解決思路:

  • 1、該topic強制采用一個磁區,所有訊息放到一個佇列里,這樣能達到全域順序性,但是會損失高并發特性,

  • 2、區域有序,采用路由機制,將同一個訂單的不同狀態訊息存盤在一個磁區partition,單執行緒消費,比如Kafka就提供了一個介面擴展org.apache.kafka.clients.Partitioner,方便開發人員按照自己的業務場景來定制路由規則,

  • 詳細內容,參考 面試官問:如何保證 MQ訊息是有序的?

訊息堆積如何處理?

答案:主要是訊息的消費速度跟不上生產速度,從而導致訊息堆積,解決思路:

  • 1、可能是剛上線的業務,或者大促活動,流量評估不到位,這時需要增加消費組的機器數量,提升整體消費能力

  • 2、也可能是消費端的問題,正常情況,一條訊息處理需要10ms,但是優化不到位或者線上bug,現在要500ms,那么消費端的整體處理速度會下降50倍,這時,我們就要針對性的排查業務代碼,Tom哥之前帶的團隊就有小伙伴出現這個問題,當時是資料庫的一條sql沒有命中索引,導致單條訊息處理耗時拉長,進而導致訊息堆積,線上報警,不過憑我們豐富的經驗,很快就定位解決了,

如何保證資料一致性問題?

答案:為了解耦,引入異步訊息機制,先進行本地資料庫操作,處理成功后,再發送MQ訊息,由消費端進行后續操作,比如:電商訂單下單成功后,要通知扣減庫存,

這兩者一定要保證事務操作,否則就會出現資料不一致問題,這時候,我們就需要引入事務訊息來解決這個問題,

另外,在消費環節,也可能出現資料不一致情況,我們可以采用最終一致性原則,增加重試機制,

事務訊息是如何實作?

答案:

  • 1、生產者先發送一條半事務訊息到MQ

  • 2、MQ收到訊息后回傳ack確認

  • 3、生產者開始執行本地事務

  • 4、if 本地事務執行成功,發送commit到MQ;失敗,發送rollback

  • 5、如果MQ?時間未收到生產者的二次確認commit或rollback,MQ對生產者發起反向回查

  • 6、生產者查詢事務執行最終狀態

  • 7、根據查詢事務狀態,再次提交二次確認

圖片

關于分布式事務問題,除了事務訊息,還有哪些解決方案?

MQ框架 如何實作高吞吐量?

答案:

  • 1、訊息的批量處理

  • 2、訊息壓縮,節省傳輸帶寬和存盤空間

  • 3、零拷貝

  • 4、磁盤的順序寫入

  • 5、page cache 頁快取,由作業系統異步將快取中的資料刷到磁盤,以及高效的記憶體讀取

  • 6、磁區設計,一個邏輯topic下面掛載N個磁區,每個磁區可以對應不同的機器消費訊息,并發設計,

Kafka 為什么不支持讀寫分離?

答案:我們知道,生產端寫入訊息、消費端拉取訊息都是與leader 副本互動的,并沒有像mysql資料庫那樣,master負責寫,slave負責讀,

這種設計主要是從兩個方面考慮:

  • 1、資料一致性,一主多從,leader副本的資料同步到follower副本有一定的延時,因此每個follower副本的訊息位移也不一樣,而消費端是通過消費位移來控制訊息拉取進度,多個副本間要維護同一個消費位移的一致性,如果引入分布式鎖,保證并發安全,非常耗費性能,

  • 2、實時性,leader副本的資料同步到follower副本有一定的延時,如果網路較差,延遲會很嚴重,無法滿足實時性業務需求,

綜上考慮,讀寫操作都是針對 leader 副本進行的,而 follower 副本主要是用于資料的備份,

MQ框架如何做到高可用性?

答案:以Kafka框架為例,其他的MQ框架原理類似,

Kafka 由多個 broker 組成,每個 broker 是一個節點,你創建一個 topic,這個 topic 可以劃分為多個 partition,每個 partition 存放在不同的 broker 上,每個 partition 存放一部分資料,每個 partition 有多個 replica 副本,

寫的時候,leader 會負責把資料同步到所有 follower 上去,讀的時候就直接讀 leader 上的資料即可,

如果某個 broker 宕機了,沒事兒,那個 broker 上面的 partition 在其他機器上都有副本,此時會從 follower 中重新選舉一個新的 leader 出來,大家繼續讀寫那個新的 leader 即可,這就是所謂的高可用性,

更多內容,可以參考 關于訊息佇列,面試官一般都會問哪些?

關于Kafka,面試官一般喜歡考察哪些問題?

答案:

  • 訊息壓縮

  • 訊息解壓縮

  • 磁區策略

  • 生產者如何實作冪等、事務

  • Kafka Broker 是如何存盤資料?備份機制

  • 為什么要引入消費組?

  • 詳細內容,參考之前寫的 聊聊 Kafka 那點破事!


最后給大家送點福利,已經幫助身邊很多小伙伴進入位元組、阿里等一線大廠,一位Google大神總結的演算法筆記,幫助你打通LeetCode的任督二脈

谷歌大佬總結LeetCode刷題筆記

也歡迎小伙伴掃下面的公眾號關注我,找Tom哥嘮嗑聊天, 技術交流,圍觀朋友圈,人生打怪不再寂寞

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

標籤:其他

上一篇:谷粒商城_06_JSR303校驗+Elasticsearch

下一篇:開發工具推薦-筆記軟體

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(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
最新发布
  • 2023年最新微信小程式抓包教程

    01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......

    uj5u.com 2023-04-20 08:48:24 more
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:47:46 more
  • vulnhub_Earth

    前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......

    uj5u.com 2023-04-20 07:46:20 more
  • 從4k到42k,軟體測驗工程師的漲薪史,給我看哭了

    清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......

    uj5u.com 2023-04-20 07:44:00 more
  • 最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇

    🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......

    uj5u.com 2023-04-20 07:43:36 more
  • 漫談前端自動化測驗演進之路及測驗工具分析

    隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......

    uj5u.com 2023-04-20 07:43:16 more
  • CANN開發實踐:4個DVPP記憶體問題的典型案例解讀

    摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......

    uj5u.com 2023-04-20 07:43:03 more
  • msf學習

    msf學習 以kali自帶的msf為例 一、msf核心模塊與功能 msf模塊都放在/usr/share/metasploit-framework/modules目錄下 1、auxiliary 輔助模塊,輔助滲透(埠掃描、登錄密碼爆破、漏洞驗證等) 2、encoders 編碼器模塊,主要包含各種編碼 ......

    uj5u.com 2023-04-20 07:42:59 more
  • Halcon軟體安裝與界面簡介

    1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......

    uj5u.com 2023-04-20 07:42:17 more
  • 在MacOS下使用Unity3D開發游戲

    第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......

    uj5u.com 2023-04-20 07:40:19 more