【MQ】如何保證消息隊列的高可用?

?RocketMQ

  • NameServer集群部署

    • Broker做了集群部署

      • 主從模式

        • 類型:同步復制、異步復制

        • 主節點返回消息給客戶端的時候是否需要同步從節點

        • Dledger:要求至少消息復制到半數以上的節點之后,才給客戶端返回寫入成功

        • slave定時從master同步數據(同步刷盤、異步刷盤),master一旦掛了,slave提供消費服務,不能寫入消息

Kafka

  • Kafka 從 0.8 版本開始提供了高可用機制,可保障一個或多個 Broker 宕機后,其他 Broker 能繼續提供服務

分區副本、備份機制

  • 同一個 Partition 存在多個消息副本,每個 Partition 的副本通常由 1 個 Leader 及 0 個以上的 Follower 組成,
    • Kafka 會盡量將所有的 Partition 以及各 Partition 的副本均勻地分配到整個集群的各個 Broker 上

    • 多副本機制

      • 分區(Partition)引入了多副本(Replica)機制。

      • 多分區、多副本機制好處呢?

        • 1. Kafka 通過給特定 Topic 指定多個 Partition分區, 而各個 Partition 可以分布在不同的 Broker 上, 這樣便能提供比較好的并發能力(負載均衡)。

        • 2. Partition 可以指定對應的 Replica 數, 這也極大地提高了消息存儲的安全性, 提高了容災能力,不過也相應的增加了所需要的存儲空間。

ACK 機制

  • 生產者發送消息中包含 acks 字段,該字段代表 Leader 應答生產者前 Leader 收到的應答數
    • 發送的 acks=1 和 0 消息會出現丟失情況,為了不丟失消息可配置生產者acks=all & min.insync.replicas >= 2

    • 「acks=0」

      • 生產者無需等待服務端的任何確認,因此 acks=0 不能保證服務端已收到消息

    • 「acks=1」默認值

      • 只要 Partition Leader 接收到消息而且寫入本地磁盤了,就認為成功了,不管其他的 Follower 有沒有同步

    • 「acks=all or -1」

      • 服務端會等所有的 follower 的副本受到數據后才會收到 leader 發出的 ack,這樣數據不會丟失

      • Broker 有個配置項min.insync.replicas(默認值為 1)代表了正常寫入生產者數據所需要的最少 ISR 個數

ISR 機制

  • ISR 中的副本都是與 Leader 同步的副本,不在 ISR 中的Follower副本就被認為是沒有資格的
    • Follower 周期性地向 Leader 發送 FetchRequest 請求,發送時間間隔配置在replica.fetch.wait.max.ms中,默認值為 500

    • 每個分區的 Leader 負責維護 ISR 列表并將 ISR 的變更同步至 ZooKeeper,被移出 ISR 的 Follower 會繼續向 Leader 發 FetchRequest 請求,試圖再次跟上 Leader 重新進入 ISR

    • ISR 中所有副本都跟上了 Leader,通常只有 ISR 里的成員才可能被選為 Leader

主從同步

  • 1、Follower副本通過發送Fetch請求來同步Leader副本上的數據。
    • Unclean 領導者選舉

      • 當 Kafka 中unclean.leader.election.enable配置為 true(默認值為 false)且 ISR 中所有副本均宕機的情況下,

      • 開啟 Unclean 領導者選舉可能會造成數據丟失,但好處是,它使得分區 Leader 副本一直存在,不至于停止對外提供服務,因此提升了高可用性,

    • LEO(Log End Offset)

      • 對于Leader副本和每個Follower副本來說,它們都有各自的LEO

      • LEO是下一個要寫入的消息的偏移量

    • HW(High Watermark)

      • HW是分區中所有副本的已提交消息的最大偏移量。是分區中所有ISR(In-Sync Replicas)副本的LEO中的最小值

      • 只要分區的Leader副本和至少一個Follower副本保持同步,消費者就能看到所有已提交的消息,即使Leader副本發生故障

    • 確保了Kafka在分區的Leader副本發生故障時,可以從ISR中選舉出一個Follower副本作為新的Leader,

Leader 選舉 & 故障恢復機制

  • 「Kafka 從 0.8 版本開始引入了一套 Leader 選舉及失敗恢復機制」
    • 在集群所有 Broker 中選出一個 Controller,負責各 Partition 的 Leader 選舉以及 Replica 的重新分配

    • Controller

      • 集群中的 Controller 也會出現故障,因此 Kafka 讓所有 Broker 都在 ZooKeeper 的 Controller 節點上注冊一個 Watcher。

    • 當出現 Leader 故障后,Controller 會將 Leader/Follower 的變動通知到需要為此作出響應的 Broker。

    • Kafka 使用 ZooKeeper 存儲 Broker、Topic 等狀態數據,Kafka 集群中的 Controller 和 Broker 會在 ZooKeeper 指定節點上注冊 Watcher(事件監聽器),以便在特定事件觸發時,由 ZooKeeper 將事件通知到對應 Broker

    • 當 Broker 發生故障后,由 Controller 負責選舉受影響 Partition 的新 Leader 并通知到相關 Broker

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

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

相關文章

ESP32 I2S音頻總線學習筆記(二):I2S讀取INMP441音頻數據

簡介 在這個系列的上一篇文章中,我們介紹了ESP32 I2S音頻總線的相關知識,簡要了解了什么是I2S總線、它的通信格式,以及相關的底層API函數。沒有看過上篇文章的可以點擊文章進行回顧: ESP32 I2S音頻總線學習筆記(一&a…

EasyExcel使用詳解

文章目錄 EasyExcel使用詳解一、引言二、環境準備與基礎配置1、添加依賴2、定義實體類 三、Excel 讀取詳解1、基礎讀取2、自定義監聽器3、多 Sheet 處理 四、Excel 寫入詳解1、基礎寫入2、動態列與復雜表頭3、樣式與模板填充 五、總結 EasyExcel使用詳解 一、引言 EasyExcel 是…

objection的簡單使用

objection環境配置 下載以下版本 objection1.11.0 frida-tools9.2.4 python3.8.8 報錯的話看這里: 在這個網站下載frida-tools14.2.18的離線包Links for frida 然后放入C:\Users\Asus\frida-14.2.18-py3.8-win-amd64.egg文件夾下 執行poetry add frida-tools14.2.18 ob…

危機13小時:追蹤一場GitHub投毒事件

事件概要 自北京時間 2024.12.4 晚間6點起, GitHub 上不斷出現“幽靈倉庫”,倉庫中沒有任何代碼,只有誘導性的病毒文件。當天,他們成為了 GitHub 上 star 增速最快的倉庫。超過 180 個虛假僵尸賬戶正在傳播病毒,等待不…

【Redis】緩存+分布式鎖

目錄 緩存 Redis最主要的使用場景就是作為緩存 緩存的更新策略: 1.定期生成 2.實時生成 面試重點: 緩存預熱(Cache preheating): 緩存穿透(Cache penetration) 緩存雪崩 (Cache avalan…

記錄 | MaxKB創建本地AI智能問答系統

目錄 前言一、重建MaxKBStep1 復制路徑Step2 刪除MaxKBStep3 創建數據存儲文件夾Step4 重建 二、創建知識庫Step1 新建知識庫Step2 下載測試所用的txtStep3 上傳本地文檔Step4 選擇模型補充智譜的API Key如何獲取 Step5 查看是否成功 三、創建應用Step1 新建應用Step2 配置AI助…

C#新語法

目錄 頂級語句(C#9.0) using 全局using指令(C#10.0) using資源管理問題 using聲明(C#8.0) using聲明陷阱 錯誤寫法 正確寫法 文件范圍的命名空間聲明(C#10.0) 可空引用類型…

基于dlib/face recognition人臉識別推拉流實現

目錄 一.環境搭建 二.推拉流代碼 三.人臉檢測推拉流 一.環境搭建 1.下載RTSP服務器MediaMTX與FFmpeg FFmpeg是一款功能強大的開源多媒體處理工具,而MediaMTX則是一個輕量級的流媒體服務器。兩者結合,可以實現將本地視頻或者實時攝像頭畫面推送到RTSP流,從而實現視頻…

Couchbase UI: Analytics

Couchbase 的 Analytics 頁面是用于執行分析查詢的部分,允許用戶對存儲在 Couchbase 中的數據進行復雜的分析和聚合。Analytics 提供了 SQL-like 查詢語言(N1QL for Analytics),使得用戶能夠輕松地執行數據分析任務。以下是關于 C…

梯度下降優化算法-Adam

Adam(Adaptive Moment Estimation)是一種結合了動量法(Momentum)和 RMSProp 的自適應學習率優化算法。它通過計算梯度的一階矩(均值)和二階矩(未中心化的方差)來調整每個參數的學習率…

論文筆記(六十三)Understanding Diffusion Models: A Unified Perspective(六)(完結)

Understanding Diffusion Models: A Unified Perspective(六)(完結) 文章概括指導(Guidance)分類器指導無分類器引導(Classifier-Free Guidance) 總結 文章概括 引用: …

【PySide6快速入門】信號與槽的使用

文章目錄 前言什么是信號與槽信號與槽的功能最簡單的信號與槽控件連接信號與信號的連接總結 前言 在 PySide6 中,信號與槽機制是核心概念之一,它是 Qt 庫中事件通信的基礎。通過信號與槽,開發者能夠實現不同組件之間的解耦,從而使…

GOGOGO 枚舉

含義:一種類似于類的一種結構 作用:是Java提供的一個數據類型,可以設置值是固定的 【當某一個數據類型受自身限制的時候,使用枚舉】 語法格式: public enum 枚舉名{…… }有哪些成員? A、對象 public …

AWTK 骨骼動畫控件發布

Spine 是一款廣泛使用的 2D 骨骼動畫工具,專為游戲開發和動態圖形設計設計。它通過基于骨骼的動畫系統,幫助開發者創建流暢、高效的角色動畫。本項目是基于 Spine 實現的 AWTK 骨骼動畫控件。 代碼:https://gitee.com/zlgopen/awtk-widget-s…

[免費]基于Python的Django博客系統【論文+源碼+SQL腳本】

大家好,我是java1234_小鋒老師,看到一個不錯的基于Python的Django博客系統,分享下哈。 項目視頻演示 【免費】基于Python的Django博客系統 Python畢業設計_嗶哩嗶哩_bilibili 項目介紹 隨著互聯網技術的飛速發展,信息的傳播與…

如何將電腦桌面默認的C盤設置到D盤?詳細操作步驟!

將電腦桌面默認的C盤設置到D盤的詳細操作步驟! 本博文介紹如何將電腦桌面(默認為C盤)設置在D盤下。 首先,在D盤建立文件夾Desktop,完整的路徑為D:\Desktop。winR,輸入Regedit命令。(或者單擊【…

C++ 寫一個簡單的加減法計算器

************* C topic:結構 ************* Structure is a very intersting issue. I really dont like concepts as it is boring. I would like to cases instead. If I want to learn something, donot hesitate to make shits. Like building a house. Wh…

excel如何查找一個表的數據在另外一個表是否存在

比如“Sheet1”有“張三”、“李四”“王五”三個人的數據,“Sheet2”只有“張三”、“李四”的數據。我們通過修改“Sheet1”的“民族”或者其他空的列,修改為“Sheet2”的某一列。這樣修改后篩選這個修改的列為空的或者為出錯的,就能找到兩…

MySQL 基礎學習(2): INSERT 操作

在這篇文章中,我們將專注于 MySQL 中的 INSERT 操作,深入了解如何高效地向表中插入數據,并探索插入操作中的一些常見錯誤與解決方案。 一、基礎 INSERT 語法 在 MySQL 中,INSERT 操作用于向表中插入新記錄,基本語法如…

CVE-2023-38831 漏洞復現:win10 壓縮包掛馬攻擊剖析

目錄 前言 漏洞介紹 漏洞原理 產生條件 影響范圍 防御措施 復現步驟 環境準備 具體操作 前言 在網絡安全這片沒有硝煙的戰場上,新型漏洞如同隱匿的暗箭,時刻威脅著我們的數字生活。其中,CVE - 2023 - 38831 這個關聯 Win10 壓縮包掛…