bookkeeper基本概念

Apache BookKeeper 架構與基本概念

Apache BookKeeper 的架構

Apache BookKeeper 是一個高性能的分布式日志存儲系統,主要用于存儲和管理順序寫入的數據。它被設計用來提供低延遲、高吞吐量和強一致性的服務,常用于分布式系統中的日志存儲需求(例如,Apache Kafka 的底層存儲就用到了類似的機制)。以下是它的架構概述:

1. 基本組件

  • Bookie:BookKeeper 的存儲節點,負責存儲日志條目(entries)。每個 Bookie 是一個獨立的服務器,管理自己的磁盤存儲。
  • Ledger:邏輯上的日志單元,是 BookKeeper 的核心抽象。一個 Ledger 是一系列日志條目的集合,類似于一個文件。Ledger 是只追加的,寫入后不可修改。
  • Client:應用程序通過 BookKeeper Client 與系統交互,負責創建 Ledger、寫入數據和讀取數據。
  • Metadata Store:元數據存儲,通常使用 Apache ZooKeeper,負責存儲 Ledger 的元數據,例如哪些 Bookie 存儲了某個 Ledger 的數據。

2. 架構設計

  • 分布式存儲:數據被分片存儲在多個 Bookie 上。每個 Ledger 的日志條目會被復制到多個 Bookie(通常是 3 個副本),以保證高可用性和容錯性。
  • 寫入流程
    1. Client 創建一個 Ledger。
    2. Client 將日志條目寫入 Ledger,數據會被發送到多個 Bookie。
    3. Bookie 收到數據后,先寫入本地日志(Journal),然后再寫入存儲(Ledger Storage),確保數據持久化。
    4. 當足夠數量的 Bookie 確認寫入成功(滿足一致性要求,例如多數派確認),Client 收到寫入成功的響應。
  • 讀取流程:Client 可以從任意存有副本的 Bookie 讀取數據。如果某個 Bookie 不可用,Client 會自動切換到其他副本。
  • 元數據管理:ZooKeeper 負責協調 Bookie 的狀態、Ledger 的分配和故障檢測。

3. 關鍵特性

  • 高吞吐量:通過分離元數據和數據存儲,以及并行寫入多個 Bookie,實現高性能。
  • 低延遲:寫入操作在內存中快速完成,Journal 機制保證數據不丟失。
  • 強一致性:支持配置副本數量和確認策略,確保數據一致性。
  • 容錯性:通過多副本和自動故障恢復機制,即使部分 Bookie 宕機也能繼續運行。

基本概念

  1. Ledger

    • 一個有序的日志條目序列。
    • 每個 Ledger 有唯一的 ID,由 Client 創建。
    • 支持只追加寫入,關閉后不可再寫。
  2. Entry

    • Ledger 中的最小數據單元,類似于日志中的一條記錄。
    • 每個 Entry 都有一個唯一的 Entry ID。
  3. Ensemble

    • 存儲某個 Ledger 的 Bookie 集合。Ensemble 大小決定了副本數量(例如,3 個 Bookie 組成一個 Ensemble)。
  4. Quorum

    • 寫入或讀取時需要的最小確認數。例如,寫入 Quorum(Write Quorum, WQ)和確認 Quorum(Ack Quorum, AQ)可以配置,以平衡性能和一致性。
  5. Journal

    • Bookie 上的預寫日志(WAL, Write-Ahead Log),用于在數據寫入存儲前記錄操作,確保數據不丟失。
  6. Striping

    • 數據分片機制,將 Ledger 的條目分布到多個 Bookie 上,提升并行性和性能。

總結

Apache BookKeeper 的架構圍繞 Ledger 和 Bookie 構建,通過分布式存儲、元數據管理(ZooKeeper)和多副本機制,實現了高性能、高可用性和強一致性。它的基本概念(如 Ledger、Entry、Ensemble 等)是理解其工作原理的關鍵。

如果您指的是其他“Bookkeeper”(例如某個特定軟件或概念),請提供更多上下文,我會調整回答!

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

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

相關文章

Scala相關知識學習總結3

包 - 包聲明:和Java類似,作用是區分同名類、管理類命名空間。Scala包名只能含數字、字母等,不能數字開頭、不能用關鍵字。 - 包說明:有類似Java的包管理風格,也有獨特嵌套風格。嵌套風格有兩個特點,一是&…

在Spring Boot中實現圖片上傳和修改

1. 圖片上傳實現步驟 1.1 添加依賴 確保 spring-boot-starter-web 和 spring-boot-starter-validation 已存在&#xff1a; <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId> <…

網絡原理 - HTTP/HTTPS

1. HTTP 1.1 HTTP是什么&#xff1f; HTTP (全稱為 “超文本傳輸協議”) 是?種應用非常廣泛的應用層協議. HTTP發展史&#xff1a; HTTP 誕生于1991年. 目前已經發展為最主流使用的?種應用層協議 最新的 HTTP 3 版本也正在完善中, 目前 Google / Facebook 等公司的產品已經…

第十屆MathorCup高校數學建模挑戰賽-A題:無車承運人平臺線路定價問題

目錄 摘 要 一、問題提出 1.1 背景 1.2 問題重述 二、基本假設 三、符號說明 四、問題分析 4.1 問題一的分析 4.2 問題二的分析 4.3 問題三的分析 4.4 問題四的分析 五、模型的建立與求解 5.1 問題一模型的建立與求解 5.1.1 數據預處理 5.1.2 問題一結果檢驗:因子分析模型 5.2…

C++假期練習

思維導圖 牛客練習

Go語言-初學者日記(四):包管理

眾所周知——“包”治百病。 理解包與模塊&#xff0c;是 Go 邁向工程化開發的關鍵一環&#xff01; &#x1f4c2; 一、包&#xff08;Package&#xff09;是 Go 的基本組織單位 在 Go 中&#xff0c;每個 .go 文件都屬于某個包&#xff08;package&#xff09;&#xff1a; …

Scala面向對象2

1. 抽象屬性和方法&#xff1a;用 abstract 關鍵字定義抽象類&#xff0c;其中抽象屬性無初始值&#xff0c;抽象方法無實現 。重寫抽象方法需用 override &#xff0c;重寫抽象屬性時&#xff0c;可變屬性用 var &#xff0c;不可變屬性用 val 。 匿名子類&#xff1a;和 Jav…

DiffAD:自動駕駛的統一擴散建模方法

25年3月來自新加坡公司 Carion 和北航的論文“DiffAD: A Unified Diffusion Modeling Approach for Autonomous Driving”。 端到端自動駕駛 (E2E-AD) 已迅速成為實現完全自動駕駛的一種有前途的方法。然而&#xff0c;現有的 E2E-AD 系統通常采用傳統的多任務框架&#xff0c…

Python四大核心數據結構深度解析:列表、元組、字典與集合

在Python編程語言中&#xff0c;數據結構是組織和存儲數據的基本方式。Python提供了四種內置的核心數據結構&#xff1a;列表&#xff08;List&#xff09;、元組&#xff08;Tuple&#xff09;、字典&#xff08;Dictionary&#xff09;和集合&#xff08;Set&#xff09;。這…

網絡編程—Socket套接字(TCP)

上篇文章&#xff1a; 網絡編程—Socket套接字&#xff08;UDP&#xff09;https://blog.csdn.net/sniper_fandc/article/details/146923670?fromshareblogdetail&sharetypeblogdetail&sharerId146923670&sharereferPC&sharesourcesniper_fandc&sharefro…

SkyWalking+Springboot實戰(最詳細)

本篇文章記錄了作者在0到1學習SkyWalking的過程&#xff0c;記錄了對SkyWalking的部署&#xff0c;學習&#xff0c;使用Bug解決等等過程 一、什么是SkyWalking 官方文檔&#xff1a; Apache SkyWalkinghttps://skywalking.apache.org/ SkyWalking 是一個開源的分布式追蹤、性…

Arduino示例代碼講解:Row-Column Scanning an 8x8 LED matrix with X-Y input LED矩陣

Arduino示例代碼講解:Row-Column Scanning an 8x8 LED matrix with X-Y input LED矩陣 Row-Column Scanning an 8x8 LED matrix with X-Y input LED矩陣功能概述硬件部分:軟件部分:代碼逐行解釋定義常量定義變量`setup()` 函數`loop()` 函數`readSensors()` 函數`refreshScr…

多線程編程中的鎖策略

目錄 1.悲觀鎖vs樂觀鎖 關鍵總結 悲觀鎖&#xff1a; 樂觀鎖&#xff1a; 選擇建議 用 悲觀鎖 當&#xff1a; 用 樂觀鎖 當&#xff1a; 2.重量級鎖vs輕量級鎖 選擇建議 用 輕量級鎖&#xff1a; 用 重量級鎖&#xff1a; 3.掛起等待鎖vs自旋鎖 關鍵細節說明 選擇…

負載均衡是什么,Kubernetes如何自動實現負載均衡

負載均衡是什么&#xff1f; 負載均衡&#xff08;Load Balancing&#xff09; 是一種網絡技術&#xff0c;用于將網絡流量&#xff08;如 HTTP 請求、TCP 連接等&#xff09;分發到多個服務器或服務實例上&#xff0c;以避免單個服務器過載&#xff0c;提高系統的可用性、可擴…

React-01React創建第一個項目(npm install -g create-react-app)

1. React特點 JSX是javaScript語法的擴展&#xff0c;React開發不一定使用JSX。單向響應的數據流&#xff0c;React實現單向數據流&#xff0c;減少重復代碼&#xff0c;比傳統數據綁定更簡單。等等 JSX是js的語法擴展&#xff0c;允許在js中編寫類似HTML的代碼 const …

小程序中的網絡請求

在小程序中&#xff0c;使用 wx.request( ) 這個方法來發送網路請求&#xff0c;整個請求的方式和 jQuery 里面的 $.ajax 方法是非常相似的。 在 wx.request( ) 這個方法中&#xff0c;接收一個配置對象&#xff0c;該配置對象中能夠配置的項目如下表&#xff1a; 關于服務器…

jvm 的attach 和agent機制

Java 的 Attach 和 Agent 機制在實際應用中得到了廣泛的成功應用&#xff0c;尤其是在監控、調試、性能分析、故障排查等方面。以下是這兩種機制在實際場景中的一些成功應用案例&#xff1a; 1. 性能監控與分析 Java Agent 和 Attach 機制廣泛應用于性能監控和分析&#xff0…

基于SpringBoot的“留守兒童網站”的設計與實現(源碼+數據庫+文檔+PPT)

基于SpringBoot的“留守兒童網站”的設計與實現&#xff08;源碼數據庫文檔PPT) 開發語言&#xff1a;Java 數據庫&#xff1a;MySQL 技術&#xff1a;SpringBoot 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系統展示 系統整體功能圖 局部E-R圖 系統首頁界面 系統注冊…

iPhone XR:一代神機,止步于此

什么樣的 iPhone &#xff0c;才配稱為一代神機&#xff1f; 我曾經用過iPhone 4S、iPhone 6S Plus、iPhone 8 Plus&#xff0c;iPhone SE2、iPhone XR、iPhone 13、iPhone 14 Plus、iPhone 15/Pro。 不管硬件再怎么卷&#xff0c;不管囊中是否羞澀&#xff0c;主力機基本沒考…

【VUE】RuoYi-Vue3項目結構的分析

【VUE】RuoYi-Vue3項目結構的分析 1. 項目地址2. RuoYi-Vue3項目結構2.1 整體結構2.2 package.json2.2.1 &#x1f9fe; 基本信息2.2.2 &#x1f527; 腳本命令&#xff08;scripts&#xff09;2.2.3 &#x1f30d; 倉庫信息2.2.4 &#x1f4e6; 項目依賴&#xff08;dependenc…