Apache Pulsar 消息、流、存儲的融合

Apache Pulsar 消息、流、存儲的融合

消息隊列在大層面有兩種不同類型的應用,一種是在線系統的message queue,一種是流計算,data pipeline的streaming高throughout,一致性較低,延遲較差的過程。

存算分離?擴容和縮容快速

segment 打散(時間和容量切分)多機器能力

多租戶的能力,配額

原來的架構,多種消息中間件不同場景不同選型

統一兼容舊系統協議,統一存儲bookkeeper

內部二級分層存儲,統一批存儲和流存儲(之前外部系統計算存儲到HDFS)

統一抽象管理,統一視圖topic抽象,但是優化存儲位置歷史數據列存等

云原生的能力

Apache BookKeeper:Apache?Pulsar的高可用強一致低延遲的存儲實現

可調整(帶寬,災備等級,一致性等級)

新起一份fragment承載寫

writer變成master,底層存儲是對等節點(區別raft一致性)

兩個writer有點像paxos

磁盤隔離WAL,數據盤隔離(可變換)

PMEM,快,容量小,壽命高,比SSD更適合做journal

Apache Pulsar 依賴的 Apache BookKeeper 作為其底層存儲引擎,其架構設計與優化機制具有鮮明的分布式系統特征。以下從架構概念、適用場景、高可用優化及一致性保障等維度進行結構化解析:


一、核心架構概念

  1. ?存儲單元與數據結構?

    • ?Entry?:最小存儲單元,每個 Entry 包含唯一遞增的序列號,支持隨機訪問和批量讀取2。
    • ?Ledger?:由多個 Entry 組成的有序日志段,具有不可變性(一旦關閉無法追加)和原子性(寫入成功或全失敗)26。
    • ?Stream?:邏輯上的無限數據流,由多個 Ledger 組成;當單個 Ledger 達到空間或時間閾值時,自動創建新 Ledger2。
    • ?Bookie 節點?:存儲節點,每個節點包含 Journal(預寫日志)、Entry Log(Entry 持久化文件)和 Index Files(索引文件)6。
  2. ?分片存儲架構?
    Pulsar 將 Topic 分區的數據切分為多個 Segment(即 BookKeeper Ledger),每個 Segment 獨立存儲于不同 Bookie 節點,實現細粒度負載均衡和擴展性37。


二、適用場景

  • ?消息系統?:為 Pulsar 提供持久化存儲,支持低延遲(<5ms)的流式追尾寫入25。
  • ?分布式日志?:適用于需要強一致性與容錯的日志存儲(如 HDFS NameNode 的 Edit Log)6。
  • ?WAL(預寫日志)?:為數據庫或分布式系統提供事務日志的高可靠存儲6。
  • ?跨數據中心復制?:支持多集群間的數據同步與一致性保障2。

三、讀寫高可用優化

  1. ?Quorum 機制?
    寫入時客戶端并行發送 Entry 至多個 Bookie 節點,需多數節點(例如 3/5)確認成功,確保數據冗余且容忍節點故障1。
  2. ?動態 Ensemble 調整?
    根據負載動態調整寫入的 Bookie 節點組合,避免熱點問題并提升吞吐量1。
  3. ?并行讀取優化?
    讀操作可并發從多個副本獲取數據,優先返回最快響應,降低延遲16。
  4. ?分片存儲負載均衡?
    通過 Segment 切分策略,將數據均勻分布至集群,避免單節點瓶頸37。

四、一致性保障機制

  1. ?寫入一致性?
    基于 Quorum 的多數確認策略,保證至少多數副本持久化成功后才返回客戶端確認16。
  2. ?LastAddConfirmed (LAC)?
    客戶端通過 LAC 標記追蹤已持久化的最新 Entry,確保讀操作僅訪問已確認數據18。
  3. ?Fencing 機制?
    當檢測到舊 Writer 可能異常時,新 Writer 通過 fencing 操作標記舊 Ledger 為不可寫,避免多 Writer 沖突(腦裂)18。
  4. ?Ledger 不可變性?
    已關閉的 Ledger 不可修改,防止數據篡改并簡化一致性管理2。

五、Writer 腦裂避免

  • ?Fencing 流程?:新 Writer 啟動時會對舊 Ledger 發起 fencing 請求,通過元數據服務(如 ZooKeeper)驗證所有權,確保同一時刻僅一個有效 Writer18。(實際上也就是用外部選主,簡化存儲層設計,達到對等節點)
  • ?原子性元數據更新?:Ledger 元數據(如狀態、Owner)需通過原子操作更新,避免并發沖突6。

六、其他重要概念

  • ?跨機房復制?:通過異步復制機制實現多集群間數據同步,支持地理容災2。
  • ?分層存儲?:支持將冷數據遷移至廉價存儲(如 HDFS),降低存儲成本6。
  • ?計算存儲分離?:Pulsar Broker 處理計算邏輯,BookKeeper 專注存儲,提升系統彈性與擴展性37。

通過上述設計,BookKeeper 在高吞吐、低延遲與強一致性之間取得平衡,成為云原生場景下可靠的分布式存儲基石。

深入對比 Apache Pulsar 與 Kafka

kafka橫向擴展困難,以及kafka的彈性伸縮困難

以下從追尾讀、切Segment、容錯恢復遷移速度、存算分離等角度對Kafka與Pulsar進行深度對比分析:


一、追尾讀(Tailing Reads)

  1. ?Kafka?

    • 采用消費者主動拉取機制,尾部讀取延遲受消費者輪詢頻率影響。在高吞吐場景下,若Topic分區數過多或消費者組協調復雜,可能出現尾部延遲波動現象25。
    • Broker同時承擔計算與存儲職責,尾部讀取可能因磁盤IO壓力導致性能下降8。
    • 從kafka的架構設計上來看,為了支持高性能讀寫,數據生產與消費都是走pagecache,當讀寫消費速率相差不大時,無需經過磁盤。但當延遲消費N設置得比較大的時候,page cache 數據不存在舊數據,只能從磁盤中加載,從而降低吞吐。Kafka積壓問題
  2. ?Pulsar?

    • 通過無狀態Broker和預讀緩存機制優化尾部讀取性能,在同等負載下延遲可穩定低于5ms5。
    • 存儲與計算分離架構減少了Broker的磁盤IO競爭,結合BookKeeper的條帶化寫入策略,尾部讀取吞吐量更高38。

二、切Segment機制

  1. ?Kafka?

    • 每個分區由多個Segment文件組成,按時間或大小拆分。切Segment時需同步更新索引文件,若寫入速率極高可能導致短暫寫入阻塞3。
    • Segment文件本地存儲,擴容時需跨節點遷移數據,影響集群整體性能6。
  2. ?Pulsar?

    • 基于BookKeeper存儲層,Segment(Ledger)以分布式副本形式存儲在多個Bookie節點上,切Segment僅需關閉當前Ledger并創建新Ledger,過程無阻塞38。
    • 新Segment寫入直接分配到可用Bookie節點,天然支持水平擴展,無需數據遷移3。

三、容錯恢復與遷移速度

  1. ?Kafka?

    • 副本恢復依賴ISR(In-Sync Replicas)機制,副本同步過程需全量復制數據,遷移速度受網絡帶寬和磁盤I/O限制6。
    • 分區再平衡時需重新選舉Leader并同步數據,大規模集群下耗時顯著增長3。
  2. ?Pulsar?

    • 存儲層BookKeeper采用多副本Quorum寫入(Write Quorum + Ack Quorum),單Bookie故障時自動切換至健康節點,恢復無需數據拷貝,僅需重放未確認的Entry8。
    • Broker無狀態設計,故障節點可快速替換,Topic分區自動遷移至新Broker,延遲僅取決于ZooKeeper元數據同步時間36。

四、存算分離架構

  1. ?Kafka?

    • 存算一體架構,Broker同時負責消息處理和存儲,擴容需同時調整計算與存儲資源,難以獨立擴展6。
    • 云原生適配性較弱,需依賴外部工具(如Kubernetes StatefulSets)實現動態擴縮容3。
  2. ?Pulsar?

    • ?計算層(Broker)與存儲層(Bookie)完全解耦?,支持獨立擴縮容。Broker無狀態,可快速水平擴展;Bookie節點動態增減不影響數據一致性38。
    • 原生適配云原生環境,結合Kubernetes可實現秒級彈性伸縮,資源利用率提升30%以上36。
    • 數據存儲采用分層設計,冷熱數據可分離至不同存儲介質(如SSD/HDD),進一步降低成本8。

五、其他關鍵差異

維度KafkaPulsar
?多租戶支持?需手動隔離,依賴外部管控工具7原生支持租戶級資源配額及Namespace隔離3
?Topic擴展性?單集群支持約數萬Topic6單集群支持超50萬Topic且性能穩定3
?數據一致性?依賴ISR機制,極端場景可能丟數8Quorum寫入+強一致性模型,金融級可靠性8

總結

  • ?Kafka?更適合對吞吐量要求極高且集群規模相對固定的場景,但運維復雜度較高。
  • ?Pulsar?在動態擴縮容、低延遲追尾讀、快速容錯恢復等方面優勢顯著,尤其適合云原生環境及需要強一致性的金融級應用35。

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

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

相關文章

JavaScript vs Python 用于 Web Scraping(2025):終極對比指南

1. 引言 在不斷發展的 Web Scraping 領域&#xff0c;選擇合適的編程語言對于項目的成功至關重要。雖然 JavaScript 和 Python 在 2025 年仍然是 Web Scraping 領域的熱門選擇&#xff0c;但它們各自具備不同的優勢和挑戰。 本指南將深入分析 JavaScript 和 Python 的核心特性…

【RocketMQ Broker 相關源碼】- NettyRemotingClient 和 NettyRemotingServer

文章目錄 1. 前言2. BrokerOuterAPI2.1 NettyRemotingClient2.2 start 啟動2.2.1 NettyRemotingClient#start 3. NettyRemotingServer3.1 ClientHousekeepingService3.2 ProducerManager#doChannelCloseEvent3.3 ConsumerManager#doChannelCloseEvent3.3.1 DefaultConsumerIdsC…

C++性能測試工具——AMD CodeAnalyst及其新工具的使用

一、CodeAnalyst及其新的替代工具 與VTune相比&#xff0c;AMD也有自己的性能測試工具&#xff0c;也就是CodeAnalyst。不過目前看&#xff0c;其應該已經有些過時&#xff0c;目前AMD提供了更新的性能測試工具uProf或CodeXL&#xff0c;這些新工具的優點在于對新的硬件架構和…

ProfibusDP主站轉modbusTCP網關與ABB電機保護器數據交互

ProfibusDP主站轉modbusTCP網關與ABB電機保護器數據交互 在工業自動化領域&#xff0c;Profibus DP&#xff08;Process Field Bus&#xff09;和Modbus TCP是兩種常見的通訊協議&#xff0c;它們各自在不同的場合發揮著重要作用。然而&#xff0c;隨著技術的發展和應用需求的…

2025.05.17淘天機考筆試真題第三題

&#x1f4cc; 點擊直達筆試專欄 &#x1f449;《大廠筆試突圍》 &#x1f4bb; 春秋招筆試突圍在線OJ &#x1f449; 筆試突圍OJ 03. 奇偶平衡樹分割問題 問題描述 K小姐是一位園林設計師&#xff0c;她設計了一個由多個花壇組成的樹形公園。每個花壇中種植了不同數量的花…

第三十五節:特征檢測與描述-ORB 特征

1. 引言:為什么需要ORB? 在計算機視覺領域,特征檢測與描述是許多任務(如圖像匹配、目標跟蹤、三維重建等)的核心基礎。傳統的算法如SIFT(尺度不變特征變換)和SURF(加速穩健特征)因其優異的性能被廣泛應用,但它們存在兩個顯著問題: 專利限制:SIFT和SURF受專利保護,…

深入解讀WPDRRC信息安全模型:構建中國特色的信息安全防護體系

目錄 前言1 WPDRRC模型概述2 模型結構詳解2.1 預警&#xff08;Warning&#xff09;2.2 保護&#xff08;Protect&#xff09;2.3 檢測&#xff08;Detect&#xff09;2.4 響應&#xff08;React&#xff09;2.5 恢復&#xff08;Restore&#xff09;2.6 反擊&#xff08;Count…

《算法導論(第4版)》閱讀筆記:p82-p82

《算法導論(第4版)》學習第 17 天&#xff0c;p82-p82 總結&#xff0c;總計 1 頁。 一、技術總結 1. Matrix Matrices(矩陣) (1)教材 因為第 4 章涉及到矩陣&#xff0c;矩陣屬于線性代數(linear algebra)范疇&#xff0c;如果不熟悉&#xff0c;可以看一下作者推薦的兩本…

基于Spring Boot和Vue的在線考試系統架構設計與實現(源碼+論文+部署講解等)

源碼項目獲取聯系 請文末卡片dd我獲取更詳細的演示視頻 系統介紹 基于Spring Boot和Vue的在線考試系統。為學生和教師/管理員提供一個高效、便捷的在線學習、考試及管理平臺。系統采用前后端分離的架構&#xff0c;后端基于成熟穩定的Spring Boot框架&#xff0c;負責數據處理…

Codeforces Round 1024 (Div.2)

比賽鏈接&#xff1a;CF1024 A. Dinner Time 只有當 n n n 是 p p p 的倍數而且 n ? q p ? m \frac{n \cdot q}{p} \not m pn?q?m 時輸出 NO&#xff0c;其余情況均滿足條件。 時間復雜度&#xff1a; O ( 1 ) O(1) O(1)。 #include <bits/stdc.h> using na…

【LeetCode 熱題 100】二叉樹的最大深度 / 翻轉二叉樹 / 二叉樹的直徑 / 驗證二叉搜索樹

??個人主頁&#xff1a;小羊 ??所屬專欄&#xff1a;LeetCode 熱題 100 很榮幸您能閱讀我的文章&#xff0c;誠請評論指點&#xff0c;歡迎歡迎 ~ 目錄 二叉樹的中序遍歷二叉樹的最大深度翻轉二叉樹對稱二叉樹二叉樹的直徑二叉樹的層序遍歷將有序數組轉換為二叉搜索樹驗…

Tomcat發布websocket

一、tomcal的lib放入文件 tomcat-websocket.jar websocket-api.jar 二、代碼示例 package com.test.ws;import com.test.core.json.Jmode;import javax.websocket.*; import javax.websocket.server.ServerEndpoint; import java.util.concurrent.CopyOnWriteArraySet; imp…

LLM筆記(二)LLM數據基礎-分詞算法(2)

文章目錄 1. 分詞算法概述1.1 基于詞典的&#xff08;或基于規則的&#xff09;分詞算法1.2 基于統計的&#xff08;或基于機器學習的&#xff09;分詞算法1.3 基于深度學習的分詞算法1.4 子詞&#xff08;Subword&#xff09;分詞算法1.5 混合分詞算法1.6 針對不同語言的特點 …

Uniapp開發鴻蒙應用時如何運行和調試項目

經過前幾天的分享&#xff0c;大家應該應該對uniapp開發鴻蒙應用的開發語法有了一定的了解&#xff0c;可以進行一些簡單的應用開發&#xff0c;今天分享一下在使用uniapp開發鴻蒙應用時怎么運行到鴻蒙設備&#xff0c;并且在開發中怎么調試程序。 運行 Uniapp項目支持運行到…

數據湖與數據倉庫融合:Hudi、Iceberg、Delta Lake 實踐對比

在實時與離線一體化的今天,數據湖與數據倉庫邊界不斷融合,越來越多企業選用如 Hudi、Iceberg、Delta Lake 等開源方案實現統一的數據存儲、計算、分析平臺。本篇將圍繞以下關鍵點,展開實戰對比與解決方案分享: ? 實時寫入能力 ? ACID 保證 ? 增量數據處理能力 ? 流批一…

Python爬蟲(29)Python爬蟲高階:動態頁面處理與云原生部署全鏈路實踐(Selenium、Scrapy、K8s)

目錄 引言&#xff1a;動態爬蟲的技術挑戰與云原生機遇一、動態頁面處理&#xff1a;Selenium與Scrapy的協同作戰1.1 Selenium的核心價值與局限1.2 Scrapy-Selenium中間件開發1.3 動態分頁處理實戰&#xff1a;京東商品爬蟲 二、云原生部署&#xff1a;Kubernetes架構設計與優化…

數據結構(十)——排序

一、選擇排序 1.簡單選擇排序 基本思想&#xff1a;假設排序表為[1,…,n]&#xff0c;第i趟排序即從[i,…,n]中選擇關鍵字最小的元素與L[i]交換 eg&#xff1a;給定關鍵字序列{87&#xff0c;45&#xff0c;78&#xff0c;32&#xff0c;17&#xff0c;65&#xff0c;53&…

小結:jvm 類加載過程

類加載過程 是Java虛擬機&#xff08;JVM&#xff09;將字節碼文件&#xff08;.class文件&#xff09;加載到內存中&#xff0c;并轉換為運行時數據結構的過程。這個過程可以分為多個步驟&#xff0c;每個步驟都有其特定的任務和目的。根據你提供的信息&#xff0c;以下是類加…

2024 山東省ccpc省賽

目錄 I&#xff08;簽到&#xff09; 題目簡述&#xff1a; 思路&#xff1a; 代碼&#xff1a; A&#xff08;二分答案&#xff09; 題目簡述&#xff1a; 思路&#xff1a; 代碼&#xff1a; K&#xff08;構造&#xff09; 題目&#xff1a; 思路&#xff1a; 代…

turn.js與 PHP 結合使用來實現 PDF 文件的頁面切換效果

將 Turn.js 與 PHP 結合使用來實現 PDF 文件的頁面切換效果&#xff0c;你需要一個中間步驟將 PDF 轉換為 Turn.js 可以處理的格式&#xff08;如 HTML 頁面或圖片&#xff09;。以下是實現這一功能的步驟和示例代碼&#xff1a; 步驟 1: 安裝必要的庫 首先&#xff0c;你需要…