面經分享二:Kafka、RabbitMQ 、RocketMQ 這三中消息中間件實現原理、區別與適用場景

一、實現原理 (Implementation Principle)

1. Apache Kafka:分布式提交日志 (Distributed Commit Log)

Kafka 的核心設計理念是作為一個分布式、高吞吐量的提交日志系統。它不追求消息的復雜路由,而是追求數據的快速、持久化流動。

  • 存儲結構
    • Topic: 消息的主題/類別。
    • Partition: 每個 Topic 被劃分為一個或多個 Partition。這是 Kafka 實現并行處理和水平擴展的核心。每個 Partition 是一個有序、不可變的消息序列。
    • Segment: 每個 Partition 在物理上又由多個 Segment 文件組成。新的消息只會追加(Append)到最后一個 Segment 文件,這是一種順序寫磁盤的操作,速度極快(甚至快過隨機寫內存)。
  • 生產者 (Producer): 將消息發布到指定的 Topic。生產者可以指定將消息發送到哪個 Partition(通過 Key 哈希或輪詢)。
  • 消費者 (Consumer): 通過消費者組 (Consumer Group) 來消費消息。同一個 Group 內的消費者共同消費一個 Topic,每個 Consumer 負責消費一個或多個 Partition。消費位置 (Offset) 由消費者自己管理并持久化,這意味著消費者可以自由回溯或重置位置。
  • Broker 與 ZooKeeper
    • Broker: Kafka 服務器節點,存儲數據。
    • ZooKeeper: (注:新版本正在去除 ZooKeeper 依賴) 負責管理 Broker 和 Consumer 的元數據(如 Topic 配置、Broker 狀態、Consumer Offset 等),實現高可用和故障轉移。
2. RabbitMQ:高級消息隊列協議代理 (AMQP Broker)

RabbitMQ 是一個實現了 AMQP 協議的標準消息代理,其核心在于消息的路由和分發

  • 核心組件
    • Producer / Consumer: 消息生產者和消費者。
    • Exchange消息路由的中心。生產者將消息發送到 Exchange,而不是直接發送到 Queue。Exchange 根據特定的規則(類型)將消息路由到一個或多個隊列。
    • Queue: 消息隊列,是消息的最終目的地并等待被消費。
    • Binding: 連接 Exchange 和 Queue 的規則,通常帶有一個 Routing Key
  • Exchange 類型(決定了路由原理):
    • Direct: 精確匹配 Routing Key。
    • Topic: 模糊匹配 Routing Key(通配符)。
    • Fanout: 廣播到所有綁定的隊列,忽略 Routing Key。
    • Headers: 通過消息頭屬性而非 Routing Key 進行匹配。
  • Broker 與 Erlang OTP: RabbitMQ 使用 Erlang 語言編寫,其天生的 OTP (Open Telecom Platform) 框架為它提供了強大的并發能力和可靠性。
3. Apache RocketMQ:金融級消息隊列 (Financial-Grade Queue)

RocketMQ 的設計融合了 Kafka 和 RabbitMQ 的一些優點,并針對金融場景進行了強化,其核心是低延遲、高可靠和事務消息

  • 存儲結構
    • 類似 Kafka,也有 TopicQueue 的概念(這里的 Queue 更類似于 Kafka 的 Partition,是負載均衡的單位)。
    • 所有消息都被持久化到磁盤,并支持同步刷盤異步刷盤兩種模式,在可靠性和性能之間提供選擇。
  • 核心組件
    • NameServer: RocketMQ 的“輕量級大腦”。功能類似 Kafka 的 ZooKeeper,但更簡單,僅負責管理 Topic 路由信息、Broker 狀態等元數據,而不存儲消費偏移量,實現了無中心化的故障轉移。
    • Broker: 消息存儲和轉發節點。
  • 事務消息原理RocketMQ 的最大特色):
    1. 生產者向 Broker 發送一條“半事務消息”。
    2. Broker 持久化該消息并回復“發送成功”。
    3. 生產者執行本地事務。
    4. 生產者根據本地事務執行結果(成功/失敗),向 Broker 發送 CommitRollback 指令。
    5. 如果 Broker 長時間未收到確認指令,會回查生產者的本地事務狀態。
      這個過程確保了本地事務和消息發送的最終一致性

二、核心區別對比 (Core Differences)

特性維度Apache KafkaRabbitMQApache RocketMQ
設計定位分布式流處理平臺企業級消息代理金融級可靠的消息隊列
核心原理順序追加的日志文件靈活路由的 Exchange-Queue 模型持久化隊列 + 事務消息機制
吞吐量極高(百萬級/秒)高(十萬級/秒)非常高(十萬級至百萬級)
延遲毫秒級(較高)微秒級(極低)毫秒級(低)
消息模型發布-訂閱點對點、發布-訂閱發布-訂閱
消息路由簡單(按 Partition)極其豐富 (Direct, Topic, Fanout)豐富(按 Tag、SQL92 過濾)
消息可靠性高(持久化、多副本)非常高(持久化、ACK確認)極高(同步刷盤、事務消息)
事務支持支持不支持原生支持(核心優勢)
治理與監控依賴外部工具自帶強大管理界面自帶控制臺,功能豐富

三、適用場景 (Use Cases)

1. Kafka 適用場景
  • 日志聚合與傳輸: 將大量應用日志、事件日志統一收集到中心平臺,再給到 ELK、Hadoop、數據倉庫等系統。
  • 流式處理 (Stream Processing): 作為 Spark Streaming、Flink、ksqlDB 等流處理引擎的實時數據源。例如:實時用戶行為分析、實時監控告警。
  • 網站活動追蹤: 追蹤用戶的點擊流(Clickstream)、瀏覽、搜索等實時活動管道。
  • 運營指標監控: 收集來自各種分布式應用的性能指標數據。

關鍵詞:大數據、日志、實時流、高吞吐。

2. RabbitMQ 適用場景
  • 異步任務處理 (Async Tasks): 將耗時操作(如發送郵件、短信通知、圖片處理、生成報表)放入隊列,由后臺 Worker 異步處理,快速響應用戶
  • 系統解耦 (Decoupling): 在微服務架構中,作為服務間的通信橋梁。訂單服務完成下單后,只需發一條消息,庫存服務、積分服務等各自訂閱處理,無需直接調用接口。
  • 流量削峰 (Peak Shaving): 在秒殺、搶購等場景中,將突發的巨額請求放入隊列,后端服務按照自己的能力勻速處理,保護后端系統不被沖垮

關鍵詞:業務解耦、異步、削峰、企業應用。

3. RocketMQ 適用場景
  • 電商交易核心鏈路訂單、支付、物流等場景。利用其事務消息確保“下單扣庫存”和“發送成功消息”的最終一致性,避免數據錯亂。
  • 金融支付: 處理資金計算、清算等對數據一致性有極端要求的業務,是 RocketMQ 的初衷和最擅長的領域。
  • 高可靠性數據同步: 在多個大型系統之間需要可靠、順序地同步數據,且不能有任何丟失。

關鍵詞:金融、交易、訂單、事務、高可靠。

總結與選型建議

  • 選 Kafka: 當你需要構建一個實時數據管道流式處理平臺,處理海量數據且允許少量延遲時。Think Big Data
  • 選 RabbitMQ: 當你需要構建一個傳統的業務系統,追求低延遲、需要靈活的消息路由友好的運維界面時。Think Business Messages
  • 選 RocketMQ: 當業務核心是交易、支付等場景,對事務一致性可靠性有極致要求時。Think Transactions & Money

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

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

相關文章

Android開發——初步了解AndroidManifest.xml

Android開發——初步了解AndroidManifest.xml ? AndroidManifest.xml 是 Android 應用的清單文件,包含了應用的包名、組件聲明、權限聲明、API 版本信息等。它是 Android 應用的“說明書”,系統通過它了解應用的結構和行為。咱們的AndroidManifest文件實…

ecplise配置maven插件

1.下載maven 2.配置系統變量 MAVEN_HOME: E:\CODE\MAVEN\apache-maven-3.0.4 3.配置環境變量 %MAVEN_HOME%\bin 4.cmd:mvn -version 注1 如圖所示為:成功 注1:配置成功的前提是要有配置JAVA_HOME,如果沒有配置,則…

Vue 項目性能優化實戰

性能優化有一套「發現 → 定位 → 解決」的閉環方法論。本文以真實項目為藍本,從編碼階段到上線監控,給出一條可落地的 Vue 性能優化路線圖。 一、量化指標定位性能瓶頸 任何優化之前先用量化證據鎖死問題。 Lighthouse 一鍵跑分:首屏、交互、…

阿里云智能多模態大模型崗三面面經

阿里云智能多模態大模型崗三面面經(詳細問題感受) 最近面試了 阿里云智能集團 - 多模態大模型崗位,三輪技術面,整體體驗還不錯。問題整體偏常規,但對項目的追問比較細致。這里整理一下完整面經,供準備類似崗…

C++ 條件變量 通知 cv.notify_all() 先釋放鎖再通知

簡短的回答是:先釋放鎖,再通知(notify_one 或 notify_all)通常是更優的選擇。 雖然標準允許兩種順序,但“先解鎖,后通知”的性能通常更好。 下面我們來詳細解釋原因和兩種方式的區別。 先通知,后…

案例精選 | 南京交通職業技術學院安全運營服務建設標桿

導語 隨著教育信息化的深入推進,高校已成為數字化轉型的前沿陣地。然而,伴隨著教學、科研、管理等業務系統的全面上云與互聯互通,高校網絡環境日益復雜,面臨的網絡安全威脅也愈發嚴峻。勒索病毒、數據泄露、APT攻擊等安全事件頻發…

AI安全必修課:模型偏見檢測與緩解實戰

點擊 “AladdinEdu,同學們用得起的【H卡】算力平臺”,H卡級別算力,80G大顯存,按量計費,靈活彈性,頂級配置,學生更享專屬優惠。 引言:AI偏見——看不見的技術債務 2018年&#xff0c…

Trae + MCP : 一鍵生成專業封面

每日一句 人生只有走出來的美麗, 沒有等出來的輝煌。 目錄 每日一句 前言 一.核心工具與優勢解析 二.操作步驟:從配置到生成廣告封面 前期準備:確認環境與工具版本 第一步. 獲取配置代碼 第二步:在 Trae 中導入 MCP 配置…

Eureka與Nacos的區別-服務注冊+配置管理

Eureka與Nacos的區別-服務注冊配置管理 以下是 Eureka 和 Nacos 的核心區別對比,幫你清晰理解它們的不同定位和特性: ?1. 核心定位? ?Eureka:?? ?純服務注冊與發現中心,源自 Netflix,核心功能是維護服務實例清單…

這才是真正懂C/C++的人,寫代碼時怎么區分函數指針和指針函數?

1.介紹 很多初中級開發者常常在這兩個術語之間感到困惑,分不清它們的定義、語法和應用場景,從而在實際編程中埋下隱患。本文旨在撥開迷霧,從概念定義、語法解析、核心區別及實戰應用四個維度,對函數指針與指針函數進行一次全面、深入的辨析,幫助您徹底厘清這兩個概念,并…

Go基礎(④指針)

簡單示例package mainimport "fmt"func main() {var num int 100var p *int &num // 指向int類型的指針fmt.Println(*p) // 解引用,輸出 100*p 200 // 通過指針修改原變量fmt.Println(num) // 輸出 200 }package mainimport "fmt…

java社交小程序源碼支持APP多端springboot部署與功能模塊詳解

構建一個支持 多端訪問、實時互動、商城交易 的綜合型應用,已成為眾多企業和開發團隊的共同目標。由 寵友信息技術有限公司 打造的 友貓社區,正是基于 Spring Boot 技術棧 的全端解決方案,既能支持 微信小程序、APP、PC管理后臺,又…

代理連接性能優化:提升網絡效率的關鍵技術與實踐

在當今數字化時代,代理連接性能優化已成為網絡架構設計中的關鍵環節。本文將深入探討如何通過技術手段提升代理服務器的響應速度、穩定性和資源利用率,幫助讀者構建高效可靠的代理網絡體系。 代理連接性能優化:提升網絡效率的關鍵技術與實踐 …

Rust 元組

簡介 元組可以由多種類型組成,長度固定。 創建元組 // 固定類型 let tup1: (i32, f64, u8) (500, 8.8, 1);// 不固定類型 let tup2 (500.99, 8.8, 1, 9.99);println!("{}", tup2.0);用模式匹配解構元組 let tup (500.99, 8.8, 1, 9.99); let (x, y…

突破閉集限制:3D-MOOD 實現開集單目 3D 檢測新 SOTA

【導讀】 單目 3D 目標檢測是計算機視覺領域的熱門研究方向,但如何在真實復雜場景中識別“未見過”的物體,一直是個難題。本文介紹的 3D-MOOD 框架,首次提出端到端的開集單目 3D 檢測方案,并在多個數據集上刷新了 SOTA。 目錄 …

Python爬蟲數據清洗實戰:從雜亂無章到整潔可用

小伙伴們,做爬蟲最頭疼的不是抓數據,而是抓回來那一堆亂七八糟的內容!價格里混著符號、日期格式千奇百怪、還有重復和缺失的值,看著就頭大。別慌,咱們用Python幾招就能搞定。Pandas處理表格數據是真香,正則…

打工人日報#20250906

打工人日報#20250906 周六了! 今天出門讀者特別痛,本來都想爽約了,不過忍下來了了,現在看來很值得! 不過還是要好好吃早餐、和熱水! 閱讀 《小米創業思考》 第一章 奇跡時代 看完了 就是快呀 好的產品 好的…

小型磨床設計cad+三維圖+設計說明書

摘 要 隨著現代加工技術的發展,各種各樣的加工技術得到了廣泛的應用,磨床在機械制造領域得到了廣泛的應用,本文經過查閱相關文獻,完成了一種小型磨床的結構設計。 本文設計的小型磨床其主要是由三部分組成的,第一部分…

音響皇帝BO,牽手全球第一AR眼鏡雷鳥,耳機黨坐不住了?

【潮汐商業評論/原創】自AI大模型技術實現突破以來,即引發一場終端革命,關于下一個智能終端入口,或者說關于下一代計算平臺,市場有過很多“狼來了”的聲音,大家紛紛猜測,在智能手機之后,究竟誰有…

中斷和異常

中斷和異常簡介 在計算機體系結構和操作系統中,中斷(Interrupt) 和 異常(Exception) 是CPU應對突發事件、實現多任務并發和錯誤處理的核心機制。二者均通過暫停當前任務、轉去執行特定處理程序來響應事件,但…