中間件-MQ常見問題

MQ常見問題

  • 消息丟失
      • 消息會在哪些環節丟失
      • 應對機制
  • 消息的順序性
  • 消息冪等
  • 消息積壓的處理

消息丟失

消息會在哪些環節丟失

  1. 網絡傳輸環節:生產者發送消息到broker,broker中master同步消息給slave,consumer消費消息,這3個環節都是跨網絡傳輸,可能造成消息丟失。
  2. 緩存信息刷盤環節:MQ存盤時都會先寫?操作系統的緩存pagecache中,然后再由操作系統異步的將消息寫?硬盤。這個中間有個時間差,就可能會造成消息丟失。如果服務掛了,緩存中還沒有來得及寫?硬盤的消息就會丟失。

應對機制

  1. 生產者發送消息環節:消息確認機制。使用同步發送機制,可以收到broker端的發送成功確認。該方法消息安全但是效率低。
  2. 消息同步環節:普通master-slave集群下,master掛掉后slave不會主動切換未master,等master再次啟動后,消息不會丟失,但這種方式犧牲了可用性。高可用Dledger集群,消息要寫入半數以上節點才會通知客戶端寫成功,消息安全性比較高,可以認為不會丟失消息。但是在腦裂情況下,也有可能會丟失消息。
  3. 刷盤環節:RocketMQ的Broker提供了?個很明確的配置項flushDiskType,可以選擇刷盤模式。有兩個可選項,SYNC_FLUSH同步刷盤和ASYNC_FLUSH異步刷盤。所謂同步刷盤,是指broker每往?志?件中寫??條消息,就調??次刷盤操作,其實也是以10毫秒的間隔去調?刷盤操作。?異步刷盤,則是指broker每隔?個固定的時間,才去調??次刷盤操作。異步刷盤性能更穩定,但是會有丟消息的可能。?同步刷盤的消息安全性就更?,但是操作系統的IO壓?就會?常?。從理論上來說,也還是會有?正常斷電造成消息丟失的可能,甚?嚴格意義上來說,任何應?程序都不可能完全保證斷電消息不丟失。
  4. 消費環節:消費狀態確認機制。也就是消費者處理完消息后,需要給Broker?個響應,
    表示消息被正常處理了。如果Broker端沒有拿到這個響應,不管是因為Consumer沒有拿到消息,還是Consumer處理完消息后沒有給出相應,Broker都會認為消息沒有處理成功。之后,Broker就會向Consumer重復投遞這些沒有處理成功的消息。RocketMQ是把消費失敗的消息方式重試隊列里面重新推送。如果Consumer給Broker返回了消費成功,用異步的方式去處理消息,這種情況可能會丟失消息。
  5. 如果MQ服務全掛掉了,想繼續保持業務運行,又想不丟失消息,通常的做法是設計?個降級緩存。Producer往MQ發消息失敗了,就往降級緩存中寫,然后,依然正常去進?后續的業務。此時,再啟動?個線程,不斷嘗試將降級緩存中的數據往MQ中發送。這樣,?少當MQ服務恢復過來后,這些消息可以盡快進?到MQ中,繼續往下游Conusmer推送,?不?于造成消息丟失。
    在這里插入圖片描述

消息的順序性

通常討論MQ的消息順序性,其實是在強調局部有序,?不是全局有序。比如某個業務流程的消息有序。
RocketMQ的順序消費機制:Producer通過設置MessageQueueSelector將?組有序的消息寫?到同?個MessageQueue中。Consumer使用Orderly的消費方式每個線程集中從?個MessageQueue中拿取消息。

消息冪等

  1. 消息的重復發送:Producer發送消息時,如果采?發送者確認的機制,那么Producer發送消息會等待Broker的響應。如果沒有收到Broker的響應,Producer就會發起重試。但是,Producer沒有收到Broker的響應,也有可能是Broker已經正常處理完了消息,只不過發給Producer的響應請求丟失了。這時候Producer再次發起消息重試,就有可能造成消息重復。RocketMQ的處理?式,是會在發送消息時,給每條消息分配?個唯?的ID。重試時broker可以根據msgId判斷是否已經處理。
  2. 消息的重復消費:RocketMQ是通過消費者的響應機制來推進offset的,如果consumer從broker上獲取了消息,正常處理之后,他要往broker返回?個響應,但是如果?絡出現波動,consumer從broker上拿取到了消息,但是等到他向broker發響應時,發??絡波動,這個響應丟失了,那么就會造成消息的重復消費。因為broker沒有收到響應,就會向這個Consumer所在的Group重復投遞消息。Comsumer端可以使用msgId進行唯一性控制,或者更嚴格的可以使?message的key屬性寫入業務的唯一屬性來控制。

消息積壓的處理

產?消息積壓的根本原因還是Consumer處理消息的效率低于消息產生的速度。所以處理消息積壓第一個可以優化Consumer處理消息的效率,第二個可以增加Consumer實例的個數。但是增加Consumer實例個數是有上限的。RocketMQ中一個Topic下的MessageQueue只能由一個消費者綁定,因此如果消費者實例數最多增加到等于MessageQueue的個數。如果此時再繼續增加Consumer的實例,那么就會有些Consumer實例是沒有MessageQueue去消費的,因此也就沒有?了。
如果要快速處理積壓的消息,可以創建?個新的Topic,配置?夠多的MessageQueue。
然后把Consumer實例的Topic轉向新的Topic,并緊急上線?組新的消費者,只負責消費舊Topic中的消息,并轉存到新的Topic中。這個速度明顯會?普通Consumer處理業務邏輯要快很多。然后在新的Topic上,就可以通過添加消費者個數來提?消費速度了。之后再根據情況考慮是否要恢復成正常情況。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/79980.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/79980.shtml
英文地址,請注明出處:http://en.pswp.cn/web/79980.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【python實用小腳本-63】每天花費2小時修復黑白照片,Python一鍵轉換,節省90%時間(建議收藏)

一、應用場景故事 上周,我的朋友小李從家里翻出了一堆老照片,這些照片大多是彩色的,但他想把它們轉換成黑白風格,讓照片更有復古感。他嘗試用Photoshop一張張處理,但花了整整一個周末,才處理了不到一半的照…

分頁管理調試

一、分頁管理原理 基本概念: 物理內存被劃分為固定大小的頁框(Page Frame),邏輯地址空間被劃分為相同大小的頁(Page)。 通過頁表(Page Table)實現邏輯地址到物理地址的映射。 邏輯…

搭建Hadoop集群standalone

在開始配置之前,請確保三臺虛擬機都正確啟動了! 具體配置步驟如下。 1.上傳spark安裝包到某一臺機器(例如:hadoop100)。 spark.3.1.2-bin-hadoop3.2.tgz。 2.解壓。 把第一步上傳的安裝包解壓到/opt/module下(也可以…

AJAX技術全解析:從基礎到最佳實踐

目錄 什么是 AJAX? 工作原理 XMLHttpRequest 基礎 現代 Fetch API Axios 第三方庫 數據處理 錯誤處理機制 跨域請求解決方案 最佳實踐 總結 1. 什么是 AJAX? AJAX(Asynchronous JavaScript and XML)是一種通過瀏覽器與…

128.在 Vue 3 中使用 OpenLayers 實現繪制矩形截圖并保存地圖區域

📌 本文將介紹如何在 Vue 3 中使用 OpenLayers 實現: 1)用戶可在地圖上繪制矩形; 2)自動截取該區域地圖為圖片; 3)一鍵保存為本地 PNG 圖片。 ?效果如下圖所示 🧠一、前言 在地圖類…

單片機 | 基于STM32的智能馬桶設計

基于STM32的智能馬桶設計結合了傳感器技術、嵌入式控制及物聯網功能,旨在提升用戶體驗并實現健康監測。以下是其設計原理、功能模塊及代碼框架的詳細解析: 一、系統架構與核心功能 智能馬桶的系統架構通常分為主控模塊、傳感器模塊、執行器模塊、通信模塊及用戶交互模塊,主…

最短路與拓撲(2)

1、信使 #include<bits/stdc.h> using namespace std; const int N105; int n,m; int g[N][N]; int dist[N]; bool st[N]; const int INF0x3f3f3f3f;int dij(){memset(dist,0x3f,sizeof dist);dist[1]0;for(int i1;i<n;i){int t0;for(int j1;j<n;j){if(!st[j]&…

當 AI 邂逅絲路:揭秘「絲路智旅」,用 RAG 重塑中阿文化旅游體驗

目錄 系統命名:絲路智旅 (Silk Road Intelligent Travel)系統概述系統架構設計系統功能模塊技術選型:為何是它們?系統優勢與特點未來展望與擴展總結在數字浪潮席卷全球的今天,古老的絲綢之路正在以一種全新的方式煥發生機。當深厚的文化底蘊遇上尖端的人工智能技術,會碰撞…

SQLPub:一個提供AI助手的免費MySQL數據庫服務

給大家介紹一個免費的 MySQL 在線數據庫環境&#xff1a;SQLPub。它提供了最新版本的 MySQL 服務器測試服務&#xff0c;可以方便開發者和測試人員驗證數據庫功能&#xff0c;也可以用于學習 MySQL。 免費申請 在瀏覽器中輸入以下網址&#xff1a; https://sqlpub.com/ SQLP…

list簡單模擬實現

成員變量迭代器&#xff08;重點&#xff09;ListIterator運算符重載begin、end 插入、刪除inserterase頭插、尾插、頭刪、尾刪 operator->const_iterator拷貝構造operator析構函數完整代碼 由于前面已經模擬實現了vector&#xff0c;所以這里關于一些函數實現就不會講的過于…

【計算機視覺】基于Python的相機標定項目Camera-Calibration深度解析

基于Python的相機標定項目Camera-Calibration深度解析 1. 項目概述技術核心 2. 技術原理與數學模型2.1 相機模型2.2 畸變模型 3. 實戰指南&#xff1a;項目運行與標定流程3.1 環境配置3.2 數據準備3.3 執行步驟3.4 結果驗證 4. 常見問題與解決方案4.1 角點檢測失敗4.2 標定結果…

多光譜影像:解鎖遙感奧秘的 “彩色鑰匙”

在遙感領域&#xff0c;多光譜影像猶如一把神奇的 “彩色鑰匙”&#xff0c;為我們開啟洞察地球表面與大氣層的全新視角。 圖片來源于星圖云開放平臺 多光譜影像&#xff0c;顧名思義&#xff0c;就是利用遙感平臺上的多光譜傳感器&#xff0c;同時對地球目標地物在多個不同光譜…

【ROS2】ROS節點啟動崩潰:rclcpp::exceptions::RCLInvalidArgument

1、問題描述 啟動ROS節點時,直接崩潰,打印信息如下: terminate called after throwing an instance of rclcpp::exceptions::RCLInvalidArgumentwhat(): failed to create guard condition: context argument is null, at ./src/rcl/guard_condition.c:65 [ros2run]: Abo…

MinerU安裝(pdf轉markdown、json)

在Windows上安裝MinerU&#xff0c;參考以下幾個文章&#xff0c;可以成功安裝&#xff0c;并使用GPU解析。 整體安裝教程&#xff1a; MinerU本地化部署教程——一款AI知識庫建站的必備工具 其中安裝conda的教程&#xff1a; 一步步教你在 Windows 上輕松安裝 Anaconda以及使…

aws 實踐創建policy + Role

今天Cyber 通過image 來創建EC2 的時候,要添加policy, 雖然是administrator 的role, 參考Cyber 提供的link: Imageshttps://docs.cyberark.com/pam-self-hosted/14.2/en/content/pas%20cloud/images.htm#Bring 1 Step1:

【ROS2】編譯Qt實現的庫,然后鏈接該庫時,報錯:/usr/bin/ld: XXX undefined reference to `vtable for

1、問題描述 在ROS2工程中,編譯使用Qt實現的庫,在其它ROS2包鏈接該庫時,報錯: /usr/bin/ld: XXX undefined reference to `vtable for2、原因分析 查看鏈接失敗的幾個函數接口都是,信號函數(signals 標記的函數)。因為信號函數都只有定義,沒有實現,在執行ROS2 colc…

數據庫--處理模型(Processing Model)(二)

執行查詢的方法有很多,接下來將介紹以更高效和更有效率的方式執行分析工作負載(在OLAP系統中)的不同技術,包括以下內容: 執行并行性(Execution Parallelism)執行引擎(Execution Engines)執行操作符輸出(Execution Operator Output)中間數據表示(Intermediate Data …

PostgreSQL pgrowlocks 擴展詳解

一、簡介 pgrowlocks 是 PostgreSQL 官方提供的擴展模塊&#xff0c;用于查看指定表中每一行當前的行級鎖&#xff08;Row Lock&#xff09;信息。它非常適用于&#xff1a; 并發沖突排查行級鎖等待分析死鎖前兆探測熱點數據行分析 二、安裝與啟用 1. 安裝前提&#xff08;…

關于xammp數據庫打開不了,但是日志沒錯誤的問題解決以及其數據庫的備份

這里參考了兩篇文章 解決Xampp中mysql無法啟動的問題_xampp里面mysql的stop啟動不起來-CSDN博客 mysqli_real_connect(): (HY000/1045): Access denied for user ‘root‘‘localhost‘ (using password: YES-CSDN博客 相信很多和我一樣&#xff0c;很久沒登xammp突然數據庫…

在UI 原型設計中,交互規則有哪些核心要素?

在UI 原型設計中&#xff0c;交互規則主要有三個核心要素&#xff0c;分別為重要性、原則與實踐&#xff0c;具體表現在&#xff1a; 一、交互規則在 UI 原型設計中的重要性 明確交互邏輯&#xff1a;設計階段制定交互規則&#xff0c;清晰定義界面元素操作響應。 如社交應用…