熟練掌握RabbitMQ和Kafka的使用及相關應用場景。異步通知與解耦,流量削峰,配合本地消息表實現事務的最終一致性并解決消息可靠、順序消費和錯誤重試等問題

RabbitMQ
在這里插入圖片描述
stock.#.nyse ,#匹配多個字符,*匹配一個字符。
Confirm Callback 到達exchange的回調。
Return Callback 到達queue失敗的回調。
Kafka
Kafka生產端
在這里插入圖片描述
分區器:
1.直接指定partition 指定0,1。
2.設置hashkey,計算key的hash值進行取模分區。
3.不設置分區鍵,采用粘性發送,即往某個分區發送至batchSize16K大小后切換分區。

RecordAccumulator(阿q米leite)生產內存池
DQuene每個partition對應一個。
batch.size,默認16k。配合linger.ms 10ms ,就是16k一批次發送,最多延遲10ms。
配合linger.ms默認0ms,不進行延遲,即來一條發一條。
sender 線程默認往每個broker發送5條緩存消息,即沒有接受到broker的應答,也能發5條。
broker 采用0 1 -1 的應答策略,
默認-1 等待所有的主從節點全部落盤,才去應答。
0 不需要任何落盤應答,直接確認。
1 主節點落盤就直接確認應答。
若應答失敗,則會無限重試。

副本分區策略。
創建一個T topic 三分區。
三節點 A B C
0 0’ 0’
1’ 1 1’
2’ 2’ 2
0為主分區lead 0’為副本

消費端
在這里插入圖片描述
enable.auto.commit 默認true ,設置為false ,開啟手動ack模式。
fetch.min.bytes 默認1B 設置為 128KB
fetch.max.wait.ms 默認500ms
Max.poll.records 最大拉取批次條數,默認500條,設置為1000條。

每個消費者都會和coordinator保持心跳(默認3s),一旦超時
(session.timeout.ms=45s),該消費者會被移除,并觸發再平衡;
或者消費者處理消息的時間過長(max.poll.interval.ms 5分鐘),也
會觸發再平衡

默認采用Range消費者分區策略
10 P 3 C
先平均分配,多的給第一個
123 10 456 789

earliest與latest的區別
earliest:
新消費者會讀取分區中從起始位置到當前最開始偏倚位置的所有消息。
latest:
新消費者會讀取分區中從起始位置到當前所有消費者最后位置。

消息冪等
1.首先是生產端發生至kafka broker
PID 每次重啟kafka則更換,Partition分區號,SeqNumber 區內順序號。
<PID, Partition, SeqNumber>
冪等性只能保證的是在單分區單會話內不重復
enable.idempotence 默認為 true
kafka Brocker不接受已經接受的順序號
2.kafka Brocker發送至 消費者端
kafka在同一消費者組,只會把同一分區的消息發送至一個消費者實例,但是由于消費者組一個實例宕機,觸發再平衡機制,可能會重新發送消息至消費者端,故消費者端也需要根據主鍵冪等判斷。
消息順序
只能保證單分區順序性。
broker接受到亂序的消息之后,會等待順序的消息,并且進行重新排序。比如Brocker 接受到1 2 4,會等到接受到3之后排好序后落盤。
max.in.flight.requests.per.connection 需要設置小于等于5 默認配置就是5
enable.idempotence 默認為 true
文件存儲機制
在這里插入圖片描述
每個Segment 1 G 大小,每4KB存儲一條索引,指定offset查詢時,先查找索引的兩端范圍,再去查詢log文件位置。
默認7天過期、以每個Segment 最大的消息時間判斷是否過期,5分鐘檢查一次。
改為30天,30分鐘檢查一次,甚至對于重要消息,可以設置永不過期,在根據消費到的offset,進行手動消費。

Kafka為什么快
1.
零拷貝
減少了兩次內核態和用戶態的文件傳輸。
在這里插入圖片描述
2.順序磁盤寫,減少磁頭尋址時間。
3.采用LZ4,Gzip等壓縮算法,減少包大小。
4.分區并行。

本地消息表
msgid(全消息唯一id)
topic(stock.relase)
status(狀態 1.未消費2.已消費3.異常重試4.錯誤5.已存在)
erromsg錯誤消息內容
e_count(異常重試次數)
e_threshold(錯誤消息閾值)
group_flag(是否是順序消息)
groupid(順序消息組號)
grouporder(順序消息組內順序號)
發送時間
消費時間
無論如何都進行,確認的ack,不然像kafka這種,uack跳過某一條消息,之后有確認了后續的消息,offset直接就移動到了ack的位置,相當于錯誤的那條消息丟了,很嚴重的。
接受消息時都去判斷,msgid是否存在,若存在,則不消費邏輯,直接已存在。若不存在,正常消費,處理完成之后標記為已消費。
若出現了異常(db超市,遠程調用異常等),標記為異常重試。
后臺定時任務,每隔5分鐘,走索引掃描異常重試的消息,二次發送至mq。
當異常重試次數達到設定的錯誤閾值2次時,直接標記改消息錯誤,記錄異常。(此時大概率是代碼邏輯的健壯性不夠導致的,比如非法的參數長度,sql進不去,或者是數組越界,或者入參沒校驗空值,出了空指針)重試再多次都不行。有個錯誤消息的前端頁面,可以直接觀測到。
順序消息,通過是否是順序消息、消息組號和組內順序號去確認,當前的消息是否應該被消費,若是第二條,則查詢庫中第一條的消費狀態,若不存在或者異常為消費,則直接入庫,等待第一條消息消費完,查詢后一條的是否存在進行消費。
當然,本地消費表只針對業務型mq。像rocketmq或者kafka有自己的策略。而且數據的并發肯定更不上mq的上限。

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

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

相關文章

飛算科技:以原創技術賦能數字轉型

在數字科技迅猛發展的浪潮中&#xff0c;飛算數智科技&#xff08;深圳&#xff09;有限公司&#xff08;簡稱 “飛算科技”&#xff09;作為一家自主創新型的數字科技公司&#xff0c;同時也是國家級高新技術企業&#xff0c;正以扎實的技術實力和豐富的實踐經驗&#xff0c;在…

基于 Rust 的Actix Web 框架的應用與優化實例

基于 Rust 的Actix Web 框架的應用與優化實例 Actix Web 框架概述 Actix Web 是一個基于 Rust 的高性能、輕量級 Web 框架,構建于 Actix 異步運行時之上。它支持異步編程模型,適合構建高并發、低延遲的 Web 服務和 API。 核心特性 異步支持:基于 async/await 語法,充分利…

springMVC01-特點、創建項目、@RequestMapping、獲取參數請求,三種域對象

一、簡介 SpringMVC 就是 Spring 框架中的 MVC 模塊&#xff0c;用于構建 Web 應用中的“控制層”。 SpringMVC 是 Spring 提供的一個基于 Servlet 的 Web MVC 框架模塊&#xff0c;是 Spring 整個體系中的“Web 層核心”。 SpringMVC 是 Spring 的一部分&#xff0c;Spring…

Java基礎,反射破壞封裝性 - 單例模式的崩塌

目錄一、容易出現問題的小李代碼小李的單例設計看似完美&#xff0c;實則存在三個致命問題&#xff1a;1、反射攻擊的天然漏洞2、序列化的隱患3、性能瓶頸二、隔壁老王的優化方案三、為什么這樣優化&#xff1f;四、小結周五下午&#xff0c;代碼審查會議上&#xff0c;小李自信…

Neo4j 綜合練習作業

Neo4j 綜合練習作業 作業說明 這個作業涵蓋了 Neo4j 的多個重要知識點&#xff0c;包括節點和關系的創建、查詢、更新、刪除以及高級查詢功能。請使用 Cypher 語句完成以下所有題目。 數據準備 首先執行以下語句創建示例數據&#xff1a; ACTED_IN: 表示出演關系 DIRECTED: 表示…

基于PA算法的FTL引導

一、抽象綁定關系 1. 什么是 AF Block,什么是 NF Block,為什么要將多個 NF Block 綁定為一個 AF Block AF Block(Allocation Flash Block) 和 NF Block(NAND Flash Block) 是在 NAND Flash 存儲架構中用于管理數據的基本單位。 AF Block 定義:AF Block 是一組多個 NF…

快速入門Java中的IO操作

以下是 Java 中常用的 IO 知識點總結&#xff1a; 1. 流的分類 按數據流向&#xff1a;輸入流&#xff08;讀取數據&#xff09;和輸出流&#xff08;寫入數據&#xff09;。按數據類型&#xff1a;字節流&#xff08;處理二進制數據&#xff0c;以字節為單位&#xff09;和字符…

小程序軟裝: 組件庫開發

本節概述 經過前面小節的學習&#xff0c;我們已經搭建起了小程序的編譯構建環境&#xff0c;能夠將我們開發的小程序項目編譯成為對應的邏輯代碼文件 logic.js&#xff0c;頁面渲染文件 view.js&#xff0c;樣式文件 style.css 和配置文件 config.json 在編譯小程序的過程中…

250708-Debian系統安裝Edge瀏覽器并配置最小中文輸入法

在 Debian 系統上安裝 Microsoft Edge 瀏覽器可以通過以下幾種方式進行。Microsoft 官方提供了 .deb 安裝包&#xff0c;適用于 Debian、Ubuntu 及其衍生系統。 A. 如何安裝&#xff1f; ? 方法一&#xff1a;使用 .deb 安裝包&#xff08;推薦&#xff09; 步驟 1&#xff…

docker所占硬盤內存指令

使用下面命令可以查看docker所占的硬盤大小&#xff0c;如&#xff1a;docker system dfdocker system df -v

A1126LLHLX-T Allegro霍爾效應鎖存器,5kHz+推挽輸出,汽車級轉速檢測專家!

A1126LLHLX-T&#xff08;Allegro&#xff09;產品解析一、產品定位A1126LLHLX-T是Allegro MicroSystems推出的全極性霍爾效應鎖存器&#xff0c;采用超薄SOT-23W封裝&#xff08;1mm厚度&#xff09;&#xff0c;專為高可靠性位置檢測與轉速測量設計&#xff0c;具有低功耗、高…

【C#】File從后往前讀取文件指定行數

/// <summary>/// 從后往前讀取文件最后行數據/// </summary>/// <param name"filePath"></param>/// <param name"count"></param>/// <returns></returns>public static List<string> ReadFileRe…

暑假算法日記第五天

目標?&#xff1a;刷完靈神專題訓練算法題單 階段目標&#x1f4cc;&#xff1a;【算法題單】滑動窗口與雙指針 LeetCode題目:683. K 個關閉的燈泡2067. 等計數子串的數量2524. 子數組的最大頻率分數2269. 找到一個數字的 K 美麗值1984. 學生分數的最小差值1461. 檢查一個字符…

【05】MFC入門到精通——MFC 為對話框中的控件添加變量 和 數據交換和檢驗

文章目錄四、 為對話框中的控件添加變量五、對話框類的5.1 為編輯框添加變量面步驟中 為對話框添加了幾個控件&#xff0c;包括三個靜態文本框&#xff0c;三個編輯框&#xff0c;一個按鈕控件。 四、 為對話框中的控件添加變量 編輯框中的數據可能會經常變化&#xff0c;有必…

4-Kafka-partition(分區)概念

Kafka Topic 分區詳解 &#x1f4cc; 一、分區核心概念 1. 什么是分區&#xff1f; 物理分片&#xff1a;Topic 被劃分為多個分區&#xff08;Partition&#xff09;&#xff0c;每個分區是一個有序、不可變的消息序列存儲單位&#xff1a;每個分區對應一個物理日志文件&…

論文略讀:UniPELT: A Unified Framework for Parameter-Efficient Language Model Tuning

ACL 2021 LoRAPrefix TuningAdapter門控藍色參數是可訓練的參數

【論文閱讀】CogView: Mastering Text-to-Image Generation via Transformers

CogView&#xff1a;通過Transformers實現文本到圖像的生成簡介目標&#xff1a;通用領域中的文本到圖像生成一直是一個開放的問題&#xff0c;它既需要強大的生成模型&#xff0c;也需要跨模態的理解。為了解決這個問題&#xff0c;我們提出了CogView&#xff0c;一個具有VQ -…

Typecho與WordPress技術架構深度對比:從LAMP到輕量級設計

文章目錄 Typecho vs WordPress:深入比較兩大博客系統的優劣與選型指南引言1. 系統概述與技術架構1.1 WordPress架構分析1.2 Typecho架構特點2. 核心功能對比2.1 內容管理能力2.2 主題與模板系統3. 性能與擴展性對比3.1 系統性能基準測試3.2 擴展生態系統4. 安全性與維護成本4…

CSS揭秘:8.連續的圖像邊框

前置知識&#xff1a;CSS 漸變&#xff0c;5. 條紋背景&#xff0c;border-image&#xff0c;基本的 CSS 動畫前言 本文旨在實現圖片邊框效果&#xff0c;即在特定場景下讓圖片顯示在邊框而非背景區域。 一、傳統實現方案 正常我們面對這樣一個需求時&#xff0c;下意識會想到的…

Linux驅動學習day20(pinctrl子系統驅動大全)

一、Pinctrl作用Pinctrl(Pin Controller)&#xff1a;控制引腳引腳的枚舉與命名、引腳復用、引腳配置。Pinctrl驅動一般由芯片原廠的BSP工程師來寫&#xff0c;一般驅動工程師只需要在設備樹中指明使用哪個引腳&#xff0c;復用為哪個功能、配置為哪些狀態。二、Pin Controller…