趕緊收藏!2024 年最常見 20道 Rocket MQ面試題(二)

上一篇地址:趕緊收藏!2024 年最常見 20道 Rocket MQ面試題(一)-CSDN博客

三、如何在RocketMQ中保證消息的順序性?

在RocketMQ中保證消息的順序性主要通過以下幾個方面實現:

  1. 1、單線程順序寫入:在RocketMQ中,每個消息隊列(MessageQueue)都是順序寫入的。當消息發送到Broker時,會根據一定的策略(如Round Robin)分配到特定的MessageQueue中,然后順序寫入到對應的CommitLog文件中。這種方式保證了在單個MessageQueue中消息是有序的。

  2. 2、消息隊列的分配:Producer在發送消息時,可以通過設置消息的屬性(如順序消息標識)來指定消息發送到特定的MessageQueue。這樣,即使在分布式環境下,相同業務標識的消息也會被發送到同一個MessageQueue中,從而保持順序性。

  3. 3、消費者拉取策略:Consumer在消費消息時,會按照MessageQueue的順序進行拉取。RocketMQ支持兩種消費模式:Pull模式和Push模式。在Pull模式下,Consumer可以主動控制從哪個MessageQueue拉取消息,保持消費的順序性。

  4. 4、順序消息標識:RocketMQ支持通過設置消息的屬性來標識順序消息。當Producer發送順序消息時,會指定一個順序消息標識,Consumer在消費時可以根據這個標識來處理順序性問題。

  5. 5、事務消息:對于需要事務性保證的順序消息,RocketMQ提供了事務消息的支持。Producer在發送事務消息時,會進行事務的開始、提交或回滾操作,確保消息的發送與數據庫操作等其他事務性操作保持一致性。

  6. 6、MessageQueue的隔離:在Consumer端,可以為每個Consumer實例指定消費特定的MessageQueue集合,從而實現對MessageQueue的隔離。這樣,每個Consumer實例只處理分配給它的MessageQueue中的消息,保持消息的順序性。

  7. 7、集群部署:在Broker宕機的情況下,RocketMQ通過Master-Slave模式來保證消息的順序性。Master負責寫入消息,Slave進行同步復制。當Master宕機時,可以進行主從切換,Slave接管消息的寫入,繼續保證消息的順序性。

  8. 8、消息過濾:RocketMQ支持在Consumer端進行消息過濾,Consumer可以根據業務規則選擇性地消費消息,這在一定程度上也有助于保持消息的順序性。

通過上述機制,RocketMQ能夠在分布式系統中有效地保證消息的順序性,滿足需要順序消費消息的業務場景需求。

四、在RocketMQ中,如何保證消息不丟失?

在RocketMQ中,保證消息不丟失是系統設計的核心目標之一,主要通過以下幾個方面來實現:

  1. 1、持久化存儲:RocketMQ將消息存儲在磁盤上的CommitLog文件中,而不是僅僅保存在內存中。這樣即使在服務器崩潰的情況下,消息也不會丟失。

  2. 2、同步刷盤機制:RocketMQ提供了同步刷盤和異步刷盤兩種方式。在同步刷盤模式下,消息寫入內存后會立即刷新到磁盤,確保消息不會因為操作系統崩潰而丟失。

  3. 3、主從復制:RocketMQ支持主從復制模式,即一個Master可以有一個或多個Slave。Master負責處理消息寫入,而Slave同步復制Master上的數據。這樣即使Master宕機,Slave也可以繼續提供服務,保證消息不丟失。

  4. 4、消息確認機制:在消息發送過程中,Producer發送消息后會等待Broker的確認。只有收到Broker的確認響應后,Producer才會認為消息發送成功。如果確認失敗,Producer可以重試發送消息。

  5. 5、消息消費確認:Consumer在消費消息后,需要向Broker發送消費確認。Broker在收到消費確認后才認為消息已被成功消費,并從CommitLog中刪除該消息。如果Consumer在消費后宕機,未發送消費確認,Broker將繼續保留消息。

  6. 6、冪等性保證:RocketMQ提供了冪等性生產者的設計,Producer在發送消息時可以指定一個唯一的消息ID。如果由于網絡或其他原因導致消息重復發送,Broker可以通過消息ID識別重復消息,避免消息重復處理。

  7. 7、消息備份:RocketMQ支持消息備份機制,即Broker可以配置多個物理路徑來存儲消息。當一個存儲路徑出現問題時,可以切換到其他路徑,從而保證消息的持久化。

  8. 8、高可用性設計:RocketMQ的NameServer組件負責集群的路由信息管理,它不直接存儲消息,因此不會成為消息丟失的單點。NameServer的集群部署可以進一步提高系統的可用性。

  9. 9、容錯和故障轉移:RocketMQ具備容錯能力,當檢測到節點故障時,會自動進行故障轉移,確保消息能夠繼續被發送和消費。

  10. 10、監控和告警:RocketMQ提供了豐富的監控指標和告警機制,幫助運維人員及時發現和處理潛在的問題,減少消息丟失的風險。

通過這些機制的綜合運用,RocketMQ能夠提供非常高的消息可靠性保證,確保在各種異常情況下消息都不會丟失。

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

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

相關文章

場景題11111

關單操作? 優先考慮定時任務、Redissonredis、RocketMQ延遲消息實現(訂單量特別大的時候,不建議使用MQ) 每個訂單都有一個消息會增加資源消耗可靠性問題(丟失)大量的無效消息不是所有消息隊列都支持一般通…

PID控制中的積分到底是什么,為什么它可以將矩形線轉換為曲線?simulink搭建PID控制,積分模塊1/s

PID控制中的積分到底是什么,為什么它可以將矩形線轉換為曲線, 這個問題呢其實道理很簡單,用到的是初中的知識 我們做幾個測試案例 如下面matlab搭建了積分1/s 那顯示如下(紅色曲線相當于加速度、藍色曲線相當于速度)&a…

Flutter 中的 AnimatedPadding 小部件:全面指南

Flutter 中的 AnimatedPadding 小部件:全面指南 在 Flutter 中,動畫是增強用戶界面和提升用戶體驗的重要工具。AnimatedPadding 是 Flutter 的動畫庫中的一個組件,它允許你為子組件添加動態變化的內邊距。這個組件可以在展開或折疊列表項、標…

5.28_Java語法_運算符,接收鍵盤數據

1、運算符 具體應用同我C語言操作符詳解博客相同,另有補充會直接寫 1.1、基本的算術運算符、符號做連接符 CSDN 具體應用同我C語言操作符詳解博客相同 符號做連接符: ""符號與字符串運算連用的時候是用作連接符的,其結果依然是一個字符串…

【html項目實戰】年長者便捷上網中心

作品介紹 本HTML作品名為“年長者便捷上網中心”,旨在為年長用戶提供一個友好且易于操作的在線界面。考慮到年長用戶對于大字體、清晰的顏色和簡潔布局的需求,該作品在設計和樣式上進行了精心打造,以確保用戶能夠輕松瀏覽和使用。 一、整體布局 作品采用經典的頭部(head…

SQL常用基礎語句(二)-- FGHIJ開頭

GROUP BY GROUP BY語法可以根據給定數據列的每個成員對查詢結果進行分組統計,最終得到一個分組匯總表。在GROUP BY子句后面包含了一個HAVING子句,HAVING類似于WHERE,(唯一的差別是WHERE過濾行,HAVING過濾組&#xff0…

前端響應式期末作品

網頁設計成品_前端響應式 主題:租房網站,共6個html頁面,包含首頁,登錄注冊,租房新聞,租房精選,租房詳情,數據可視化頁面(可以修改內容) 采用技術:…

啟動ChatGPT 的快捷鍵,探索全新 ChatGPT MacOS 應用程序!

博主貓頭虎的技術世界 🌟 歡迎來到貓頭虎的博客 — 探索技術的無限可能! 專欄鏈接: 🔗 精選專欄: 《面試題大全》 — 面試準備的寶典!《IDEA開發秘籍》 — 提升你的IDEA技能!《100天精通鴻蒙》 …

前端錯誤監控與日志收集實踐

前端錯誤監控與日志收集是確保應用程序穩定性和用戶體驗的關鍵部分。今天我們來聊聊前端常用的前端錯誤監控與日志收集方法: 使用try-catch捕獲錯誤 在可能出現錯誤的代碼塊中,使用try-catch結構捕獲錯誤: try {// 可能會拋出錯誤的代碼} c…

深度解析Java 11核心新特性

碼到三十五 &#xff1a; 個人主頁 < 免責聲明 > 避免對文章進行過度解讀&#xff0c;因為每個人的知識結構和認知背景都不同&#xff0c;沒有一種通用的解決方案。對于文章觀點&#xff0c;不必急于評判。融入其中&#xff0c;審視自我&#xff0c;嘗試從旁觀者角度認清…

kafka 工作流程文件存儲

爬蟲組件分析 目錄概述需求&#xff1a; 設計思路實現思路分析1.kafka 工作流程2.kafka 文件存儲 參考資料和推薦閱讀 Survive by day and develop by night. talk for import biz , show your perfect code,full busy&#xff0c;skip hardness,make a better result,wait for…

軟考結束。有什么要說的

1. 竟然是機試&#xff0c;出乎我意料。是 考試機構覺得筆試成本高了么。這次的考試是機試&#xff0c;相比以往有所不一樣。感言是不是以后都會在固定地點考試也說不準。 2. 遇到年輕人。 這次旁邊的一個女同學第一次參加&#xff0c;還像我詢問了一些關于軟考的事。我是有…

深度解析Vue.js組件間的通信方式

Vue.js 組件通信主要通過以下幾種方式來實現&#xff1a; Props&#xff08;屬性&#xff09; 方向&#xff1a;父組件到子組件用途&#xff1a;父組件通過屬性向子組件傳遞數據。特性&#xff1a; 只讀&#xff1a;默認情況下&#xff0c;子組件不能改變props的值。驗證&…

關于學習Go語言的并發編程

開始之前&#xff0c;介紹一下?最近很火的開源技術&#xff0c;低代碼。 作為一種軟件開發技術逐漸進入了人們的視角里&#xff0c;它利用自身獨特的優勢占領市場一角——讓使用者可以通過可視化的方式&#xff0c;以更少的編碼&#xff0c;更快速地構建和交付應用軟件&#…

【數據結構】直接選擇排序詳解!

文章目錄 1.直接選擇排序 1.直接選擇排序 &#x1f427; begin 有可能就是 maxi &#xff0c;所以交換的時候&#xff0c;要及時更新 maxi &#x1f34e; 直接選擇排序是不穩定的&#xff0c;例如&#xff1a; 9 [9] 5 [5]&#xff0c;排序后&#xff0c;因為直接選擇排序是會…

Debug-012-el-popover 使用 doClose() 關閉窗口不生效的處理方案

前言&#xff1a; 今天上午碰見一個非常奇怪的情況&#xff1a;一樣的方法實現的功能&#xff0c;效果卻不一樣。 兩個頁面都是使用的doClose()去關閉的el-popover&#xff0c;其中有一個就是不生效&#xff0c;找不同找了半天&#xff0c;始終不得其解。請看效果吧&#xff1…

Day 5:2785. 將字符串中的元音字母排序

Leetcode 2785. 將字符串中的元音字母排序 給你一個下標從 0 開始的字符串 s &#xff0c;將 s 中的元素重新 排列 得到新的字符串 t &#xff0c;它滿足&#xff1a; 所有輔音字母都在原來的位置上。更正式的&#xff0c;如果滿足 0 < i < s.length 的下標 i 處的 s[i] …

【第5章】SpringBoot整合Druid

文章目錄 前言一、啟動器二、配置1.JDBC 配置2.連接池配置3. 監控配置 三、配置多數據源1. 添加配置2. 創建數據源 四、配置 Filter1. 配置Filter2. 可配置的Filter 五、獲取 Druid 的監控數據六、案例1. 問題2. 引入庫3. 配置4. 配置類5. 測試類6. 測試結果 七、案例 ( 推薦 )…

理解磁盤分區與管理:U啟、PE、DiskGenius、MBR與GUID

目錄 U啟和PE的區別: U啟(U盤啟動): PE(預安裝環境)&#xff1a; 在DiskGenius中分區完成之后是否還需要格式化&#xff1a; 1.建立文件系統&#xff1a; 2.清除數據&#xff1a; 3.檢查并修復分區&#xff1a; 分區表格式中&#xff0c;MBR和GUID的區別&#xff1a; 1…

移動端開發 筆記01

目錄 01 移動端的概述 02 移動端的視口標簽 03 開發中的二倍圖 04 流式布局 05 彈性盒子布局 01 移動端的概述 移動端包括:手機 平板 便攜式設備 目前主流的移動端開發: 安卓設備 IOS設備 只要移動端支持瀏覽器 那么就可以使用瀏覽器開發移動端項目 開發移動端 使用…