Rocketmq 入門介紹

從零手寫實現 mq

詳細介紹一下 rocketmq

RocketMQ 是由阿里巴巴開發的分布式消息隊列系統,它是一個低延遲、高可靠、高吞吐量的消息中間件。

RocketMQ 最初是作為阿里巴巴的內部項目進行開發的,后來成為了 Apache 軟件基金會下的頂級項目,以 Apache 許可證 2.0 發布,使其成為一個開放、免費的開源項目。

以下是 RocketMQ 的一些主要特性:

  1. 分布式架構:RocketMQ 是基于分布式架構設計的,可以輕松地實現水平擴展以滿足高吞吐量和大規模部署的需求。它支持多個消息隊列服務器(Broker)和多個消息消費者,以實現負載均衡和高可用性。

  2. 高可靠性:RocketMQ 提供了嚴格的消息傳遞保證,包括順序消息、事務消息、消息重試等機制,確保消息不會丟失。它使用主從復制和同步刷盤等技術來保證消息的可靠性。

  3. 高吞吐量:RocketMQ 在設計上注重了高吞吐量的目標,通過優化網絡通信、存儲和消息處理等方面的性能,實現了非常高的消息處理速度。

  4. 低延遲:RocketMQ 的設計追求低延遲,能夠快速地將消息傳遞給消費者,并且支持優先級消息以及批量發送等特性,進一步降低了消息傳遞的延遲。

  5. 靈活的消息模型:RocketMQ 支持多種消息模型,包括點對點(P2P)模型和發布/訂閱(Pub/Sub)模型,可以滿足不同場景下的需求。

  6. 豐富的功能:RocketMQ 提供了豐富的功能和特性,包括消息過濾、延遲消息、定時消息、事務消息等,可以滿足各種復雜的業務場景需求。

  7. 可擴展性:RocketMQ 提供了豐富的插件和擴展接口,可以方便地進行定制化開發和擴展,以滿足特定業務需求。

RocketMQ 是一個功能豐富、穩定可靠、性能優異的分布式消息隊列系統,廣泛應用于互聯網、物聯網、大數據等領域,為企業提供了可靠的消息通信基礎設施。

為什么要用 rocketmq 呢?和 kafka/rabbitmq/activemq 等對比有哪些優缺點?

使用 RocketMQ 的原因可以有很多,具體取決于你的業務需求、技術棧以及團隊的偏好。

以下是使用 RocketMQ 的一些常見原因以及與其他消息隊列系統(如 Kafka、RabbitMQ 和 ActiveMQ)進行對比的優缺點:

為什么要使用 RocketMQ?

  1. 高可靠性和穩定性:RocketMQ 提供了主從復制、同步刷盤等機制,確保消息不會丟失,能夠滿足對消息傳遞可靠性要求較高的場景。

  2. 低延遲:RocketMQ 追求低延遲的設計目標,能夠快速地將消息傳遞給消費者,適用于對延遲要求較高的業務場景。

  3. 高吞吐量:RocketMQ 通過優化網絡通信、存儲和消息處理等方面的性能,實現了非常高的消息處理速度,適用于需要處理大量消息的場景。

  4. 豐富的功能:RocketMQ 提供了豐富的功能和特性,如消息過濾、延遲消息、定時消息、事務消息等,可以滿足各種復雜的業務場景需求。

  5. Apache 開源項目:RocketMQ 是 Apache 軟件基金會下的頂級項目,具有開放、免費、社區活躍等特點,受到了廣泛的關注和支持。

與其他消息隊列系統的對比優缺點:

  1. 與 Kafka 對比

    • 優點:Kafka 在大數據領域有很高的知名度和使用率,適用于大規模數據處理和實時分析等場景。
    • 缺點:相比 Kafka,RocketMQ 更加注重消息傳遞的可靠性和穩定性,對于一些對消息可靠性要求更高的場景可能更適合使用 RocketMQ。
  2. 與 RabbitMQ 對比

    • 優點:RabbitMQ 在 AMQP(高級消息隊列協議)的支持上更加全面,適用于復雜的消息傳遞場景,如分布式事務、消息確認等。
    • 缺點:相比 RabbitMQ,RocketMQ 在分布式部署和水平擴展方面更加靈活和簡單,適用于高并發、大規模的消息傳遞場景。
  3. 與 ActiveMQ 對比

    • 優點:ActiveMQ 是一個成熟的 JMS(Java 消息服務)實現,提供了豐富的功能和協議支持,適用于 Java 生態系統中的消息傳遞場景。
    • 缺點:相比 ActiveMQ,RocketMQ 更加輕量級和高性能,適用于對消息傳遞性能和穩定性要求較高的場景。

rocketmq 是如何保證消息不丟失的?

RocketMQ 通過多種機制來確保消息不會丟失,主要包括以下幾點:

  1. 同步刷盤:RocketMQ 在寫入消息時采用同步刷盤的方式,即消息寫入磁盤后會立即返回確認,確保消息已經被持久化到磁盤。這樣即使在發生服務器宕機等異常情況時,已經持久化到磁盤的消息不會丟失。

  2. 主從復制:RocketMQ 支持主從復制機制,即一個主節點(Master)可以配置多個從節點(Slave)。當主節點宕機時,RocketMQ 會自動選舉其中一個從節點作為新的主節點,從而保證消息隊列的可用性和數據不丟失。

  3. 數據預寫日志(WAL):RocketMQ 使用預寫日志(Write-Ahead Logging)來記錄消息的變更操作,確保即使在消息寫入磁盤過程中出現異常,可以通過重放預寫日志來恢復數據,從而避免消息丟失。

  4. 消息復制和同步:RocketMQ 在消息發送過程中會將消息復制到多個 Broker 節點上,以實現消息的備份和冗余,從而提高消息的可靠性和可用性。同時,RocketMQ 會在 Broker 之間進行消息同步,確保消息在不同節點之間的一致性。

  5. 消息確認機制:RocketMQ 提供了消息發送確認機制,即生產者發送消息后會等待 Broker 的確認響應,確保消息已經被成功存儲。只有當 Broker 返回確認響應后,生產者才會認為消息已經安全發送,從而避免消息丟失。

綜合利用以上的機制,RocketMQ 能夠有效地保證消息不會丟失,并且具有較高的可靠性和穩定性,適用于各種對消息傳遞可靠性要求較高的場景。

rocketmq 又是如何保證低延遲,高吞吐量的呢、

RocketMQ 通過一系列的設計和機制來保證消息不丟失、低延遲和高吞吐量。

下面我將詳細解釋:

1. 消息存儲機制:

  • RocketMQ 使用了類似于日志的存儲方式,將消息持久化存儲在磁盤上,以保證即使在服務重啟或者宕機后,消息仍然不會丟失。這種存儲方式也能夠保證消息的順序性。

2. 主從復制機制:

  • RocketMQ 支持主從復制機制,即每個主題的消息會在多個 Broker 節點上進行同步復制。當主節點宕機或者發生故障時,可以快速切換到備用節點,確保消息的可靠性和高可用性。

3. 同步刷盤機制:

  • RocketMQ 提供了同步刷盤機制,即生產者在發送消息后會等待消息被同步寫入磁盤之后才返回成功響應,確保消息不會因為寫入內存而丟失。

4. 消息確認機制:

  • RocketMQ 提供了消息確認機制,生產者發送消息后會等待消費者確認消息已經成功消費,如果消費者沒有確認,則會進行消息重試,直到消息被確認消費或者達到最大重試次數。

5. 優化網絡通信和存儲性能:

  • RocketMQ 對網絡通信和存儲進行了優化,采用了零拷貝技術和順序寫入磁盤等方法,提高了消息傳輸和存儲的效率,從而降低了延遲和提升了吞吐量。

6. 分布式架構和負載均衡:

  • RocketMQ 采用了分布式架構,并且支持多個 Broker 節點,可以根據負載情況進行動態調整,確保消息能夠快速被路由到可用的節點進行處理,提高了系統的吞吐量和性能。

7. 異步消息發送和批量發送:

  • RocketMQ 支持異步消息發送和批量發送,生產者可以將多個消息打包發送,減少了網絡通信的開銷,提高了消息的傳輸效率和吞吐量。

8. 優先級消息和快速失敗機制:

  • RocketMQ 支持優先級消息和快速失敗機制,可以根據消息的優先級進行排序和處理,確保重要消息能夠優先得到處理,并且在消費者處理失敗時能夠快速進行失敗處理,降低了延遲。

RocketMQ 通過多種機制和優化手段,包括消息存儲、復制機制、同步刷盤、消息確認、網絡通信和存儲性能優化等,來保證消息不丟失、低延遲和高吞吐量,從而滿足不同業務場景下的需求。

rocketmq 如何保證消息消費的順序性?

RocketMQ 通過一系列的設計和機制來保證消息消費的順序性,主要包括以下幾個方面:

  1. 隊列和分區機制

    • RocketMQ 中的每個主題(Topic)都可以包含多個隊列(Queue),而每個隊列可以在不同的 Broker 節點上,這樣可以通過調整隊列數量和分配來達到消息的有序性。在發送消息時,生產者可以選擇將消息發送到指定的隊列,從而確保一組相關消息被順序地存儲在同一個隊列中。
  2. 生產者發送順序消息

    • RocketMQ 提供了發送順序消息的功能,生產者可以在發送消息時指定消息的順序關鍵字,RocketMQ 根據這個關鍵字將消息發送到同一個隊列中,從而確保一組相關消息被順序地發送到 Broker。
  3. 消費者按順序消費

    • RocketMQ 提供了一種叫做順序消費的方式,消費者可以通過設置消息消費的方式為順序消費,這樣消費者在處理消息時會按照消息的順序進行消費,從而確保消息的順序性。
  4. 消息隊列鎖機制

    • RocketMQ 提供了一種叫做順序消息隊列鎖(Orderly Message Queue Lock)的機制,在順序消費模式下,會使用隊列鎖來確保同一隊列的消息不會被多個消費者并發消費,從而保證了消息的順序性。
  5. 消費者分組機制

    • RocketMQ 的消費者可以通過消費者分組(Consumer Group)來進行負載均衡和水平擴展,同一個消費者分組內的消費者會均衡地消費消息,而不同分組的消費者則可以并行消費消息,這樣可以確保不同分組內的消息消費是有序的。

綜上所述,RocketMQ 通過隊列和分區機制、順序消息發送、順序消費、消息隊列鎖機制和消費者分組等方式來保證消息消費的順序性,從而滿足了對消息順序性要求較高的業務場景。

本文由博客一文多發平臺 OpenWrite 發布!

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

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

相關文章

精讀《React 高階組件》

本期精讀文章是:React Higher Order Components in depth 1 引言 高階組件( higher-order component ,HOC )是 React 中復用組件邏輯的一種進階技巧。它本身并不是 React 的 API,而是一種 React 組件的設計理念&…

【QT+QGIS跨平臺編譯】之五十三:【QGIS_CORE跨平臺編譯】—【qgssqlstatementparser.cpp生成】

文章目錄 一、Bison二、生成來源三、構建過程一、Bison GNU Bison 是一個通用的解析器生成器,它可以將注釋的無上下文語法轉換為使用 LALR (1) 解析表的確定性 LR 或廣義 LR (GLR) 解析器。Bison 還可以生成 IELR (1) 或規范 LR (1) 解析表。一旦您熟練使用 Bison,您可以使用…

transformers文本相似度

在自然語言處理(NLP)中,文本相似度是衡量兩個文本之間語義或結構相似程度的一個重要概念。計算文本相似度的方法多種多樣,適應不同的應用場景和需求。以下是一些常見的文本相似度計算方法: 1、余弦相似度: 通過將文本轉換為向量表示(例如,使用詞袋模型、TF-IDF 或 wor…

2024年個人護理賽道選品風向在哪?這份賽盈分銷選品攻略必看!

2024年還會卷下去嗎?看到一位行業大佬分享的內容深有感觸:堅定做好產品,不做大賣,就不存在卷不卷。 有人出局,也會有人入局,并且深耕領域做大做強。 專注口腔護理的Bitvae入行不到兩年,憑借一款…

C#學習(十四)——垃圾回收、析構與IDisposable

一、何為GC 數據是存儲在內存中的,而內存又分為Stack棧內存和Heap堆內存 Stack棧內存Heap堆內存速度快、效率高結構復雜類型、大小有限制對象只能保存簡單的數據引用數據類型基礎數據類型、值類型- 舉個例子 var c new Customer{id: 123,name: "Jack"…

Java中String類有哪些常用方法?

Java中的String類提供了許多有用的方法,用于處理字符串。以下是一些常用的方法及其簡要描述: 1. **charAt(int index)**:返回指定位置的字符。 2. **length()**:返回字符串的長度。 3. **substring(int beginIndex, int endInd…

微信小程序手勢沖突?不存在的!

原生的應用經常會有頁面嵌套列表,滾動列表能夠改變列表大小,然后還能支持列表內下拉刷新等功能。看了很多的小程序好像都沒有這個功能,難道這個算是原生獨享的嗎,難道是由于手勢沖突無法實現嗎,冷靜的思考了一下&#…

Google驗證碼,掃描綁定,SpringBoot+ vue

文章目錄 后端1.使用Google工具類這個 類的 verifyTest 方法可以判斷掃描綁定之后的app上面驗證碼的準確性。這個類通過g_user,g_code(就是谷歌驗證器的secret,這個你已經插入到數據庫 中)來生成相關二維碼。2.用工具類自帶的g_user,g_code來生成二維碼2.1通過請求來生成相關二…

你知道vector底層是如何實現的嗎?

你知道vector底層是如何實現的嗎? vector底層使用動態數組來存儲元素對象,同時使用size和capacity記錄當前元素的數量和當前動態數組的容量。如果持續的push_back(emplace_back)元素,當size大于capacity時,需要開辟一塊更大的動態…

【InternLM 實戰營筆記】XTuner 大模型單卡低成本微調實戰

XTuner概述 一個大語言模型微調工具箱。由 MMRazor 和 MMDeploy 聯合開發。 支持的開源LLM (2023.11.01) InternLM Llama,Llama2 ChatGLM2,ChatGLM3 Qwen Baichuan,Baichuan2 Zephyr 特色 傻瓜化: 以 配置文件 的形式封裝了大…

WebGIS----wenpack

學習資料:https://webpack.js.org/concepts/ 簡介: Webpack 是一個現代化的 JavaScript 應用程序的模塊打包工具。它能夠將多個 JavaScript 文件和它們的依賴打包成一個單獨的文件,以供在網頁中使用。 Webpack 還具有編譯和轉換其他類型文…

自學新標日第六課(單詞部分 未完結)

第六課 單詞 單詞假名聲調詞義來月らいげつ1下個月先月せんげつ1上個月夜中よなか3午夜昨夜ゆうべ0昨天晚上コンサートこんさーと1音樂會クリスマスくりすます3圣誕季誕生日たんじょうび3生日こどもの日こどものひ5兒童節夏休みなつやすみ3…

看待事物的層與次 | DBA與架構的一次對話交流

前言 在計算機軟件業生涯中,想必行內人或多或少都能感受到系統架構設計與數據庫系統工程的重要性,也能夠清晰地認識到在計算機軟件行業中技術工程師這個職業所需要的專業素養和必備技能! 背景 通過自研的數據庫監控管理工具,發現 SQL Server 數據庫連接數在1-2K之間,想…

Yii2中如何使用scenario場景,使rules按不同運用進行字段驗證

Yii2中如何使用scenario場景,使rules按不同運用進行字段驗證 當創建news新聞form表單時: 添加新聞的時候執行create動作。 必填字段:title-標題,picture-圖片,description-描述。 這時候在model里News.php下rules規則…

星座每日運勢 api接口

接口數據api 接口平臺&#xff1a;https://api.yuanfenju.com/ 開發文檔&#xff1a;https://doc.yuanfenju.com/zhanbu/yunshi.html 支持格式&#xff1a;JSON 請求方式&#xff1a;HTTP POST <?php//您的密鑰 $api_secret "wD******XhOUW******pvr"; //請…

利用coze 搭建“全功能“微信客服(2)

緊跟上篇 利用coze 搭建"全功能"微信客服&#xff08;1&#xff09;&#xff0c;不知道來龍去脈自行查閱 先表揚下coze: coze 是國內少數開放平臺之一&#xff0c;里面提供各種插件還可以開發工作流&#xff0c;讓你可以實現多模態全功能大模型 吐槽 沒有API開放接口…

國外最流行的是AI,國內最流行的是AI培訓教程

國外最流行的是AI&#xff0c;國內最流行的是AI培訓教程。 最近李一舟AI教程事件&#xff0c;驗證了這句話。 如今給客戶做方案項目里能加點AI色彩&#xff0c;立項的成功率都變大(特別是事業單位)。 正因如此&#xff0c;大家都在狂補AI的知識&#xff0c;不然肚子里沒點墨水&…

2024亞馬遜全球開店注冊前需要準備什么?

在2023年出海四小龍SHEIN、Temu、速賣通AliExpress、TikTok Shop快速增長擴張&#xff0c;成為了中國跨境賣家“逃離亞馬遜”的新選擇。但是&#xff0c;跨境電商看亞馬遜。當前&#xff0c;亞馬遜仍然是跨境電商行業的絕對老大&#xff0c;占有將近70%成以上的業務份額。 作為…

threejs顯示本地硬盤上的ply文件,通過webapi

由于ply文件是第三方提供的&#xff0c;threejs無法用絕路路徑的方式顯示ply 所以想通過webapi把ply通過url地址的方式給threejs 1.webapi部分 /// <summary>/// 獲取PLY文件/// </summary>/// <returns></returns>[HttpPost(Name "GetPly&qu…

分享fastapi低級錯誤

我是創建表的時候把__tablename__ 寫成__table__然后一直報這個錯誤