溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Apache BookKeeper的概念和相關(guān)術(shù)語(yǔ)是什么

發(fā)布時(shí)間:2021-11-23 11:07:32 來(lái)源:億速云 閱讀:144 作者:柒染 欄目:大數(shù)據(jù)

本篇文章給大家分享的是有關(guān)Apache BookKeeper的概念和相關(guān)術(shù)語(yǔ)是什么,小編覺(jué)得挺實(shí)用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說(shuō),跟著小編一起來(lái)看看吧。

Apache BookKeeper 是企業(yè)級(jí)存儲(chǔ)系統(tǒng),旨在保證高持久性、一致性與低延遲。Pulsar 由雅虎研究院(Yahoo! Research)開發(fā),旨在實(shí)現(xiàn) Hadoop 分布式文件系統(tǒng)(HDFS)NameNode 的高可用,在此之前,NameNode 不具備高可用特性,存在單點(diǎn)故障的問(wèn)題。

背景介紹

BookKeeper 的開發(fā)者 Benjamin Reed、Flavio Junqueira、Ivan Kelly 憑借搭建 ZooKeeper 的經(jīng)驗(yàn)設(shè)計(jì)了一個(gè)靈活的系統(tǒng),能夠支持多種工作負(fù)載。


最初,BookKeeper 是分布式系統(tǒng)的預(yù)寫式日志(WAL)機(jī)制。現(xiàn)在 BookKeeper 已經(jīng)發(fā)展成為支持多個(gè)企業(yè)級(jí)系統(tǒng)的基礎(chǔ)構(gòu)建模塊,如:Twitter 的 EventBus、雅虎的 Apache Pulsar 等。

BookKeeper 是什么?

BookKeeper 是一種優(yōu)化實(shí)時(shí)工作負(fù)載的存儲(chǔ)服務(wù),具有可擴(kuò)展、高容錯(cuò)、低延遲的特點(diǎn)。根據(jù)我們多年的工作經(jīng)驗(yàn),企業(yè)級(jí)的實(shí)時(shí)存儲(chǔ)平臺(tái)應(yīng)符合以下幾項(xiàng)要求:

  • 以極低的延遲(小于 5 毫秒)讀寫 entry 流

  • 能夠持久、一致、容錯(cuò)地存儲(chǔ)數(shù)據(jù)

  • 在寫數(shù)據(jù)時(shí),能夠進(jìn)行流式傳輸或追尾傳輸

  • 有效地存儲(chǔ)、訪問(wèn)歷史數(shù)據(jù)與實(shí)時(shí)數(shù)據(jù)

BookKeeper 的設(shè)計(jì)完全符合以上要求,并廣泛用于多種用例,例如為分布式系統(tǒng)提供高可用性或多副本(如 HDFS NameNode 節(jié)點(diǎn)、Twitter 的 Manhattan key-value 存儲(chǔ));在單個(gè)集群中或多個(gè)集群間(多個(gè)數(shù)據(jù)中心)提供跨機(jī)器復(fù)制;為發(fā)布/訂閱(pub-sub)消息系統(tǒng)(如 Twitter 的 EventBus、Apache Pulsar)提供存儲(chǔ)服務(wù);為流工作存儲(chǔ)不可變對(duì)象(例如:檢查點(diǎn)數(shù)據(jù)的快照)等。


BookKeeper 的概念及術(shù)語(yǔ)

BookKeeper 復(fù)制并持久存儲(chǔ)日志流。日志流是形成良好序列的記錄流。

??記錄

數(shù)據(jù)以不可分割記錄的序列,而不是單個(gè)字節(jié)寫入 Apache BookKeeper 的日志。記錄是 BookKeeper 中最小的 I/O 單元,也被稱作地址單元。單條記錄中包含與該記錄相關(guān)或分配給該記錄的序列號(hào)(例如遞增的長(zhǎng)數(shù))。

客戶端總是從特定記錄開始讀取,或者追尾序列。也就是說(shuō),客戶端通過(guò)監(jiān)聽序列來(lái)尋找下一條要添加到日志中的記錄。客戶端可以單次接收單條記錄,也可以接收包含多條記錄的數(shù)據(jù)塊。序列號(hào)也可以用于隨機(jī)檢索記錄。

??日志

BookKeeper 中提供了兩個(gè)表示日志存儲(chǔ)的名詞:一個(gè)是 ledger(又稱日志段);另一個(gè)是 stream(又稱日志流)。

Ledger 用于記錄或存儲(chǔ)一系列數(shù)據(jù)記錄(日志)。當(dāng)客戶端主動(dòng)關(guān)閉或者當(dāng)充當(dāng) writer 的客戶端宕機(jī)時(shí),正在寫入此 ledger 的記錄會(huì)丟失,而之前存儲(chǔ)在 ledger 中的數(shù)據(jù)不會(huì)丟失。Ledger 一旦被關(guān)閉就不可變,也就是說(shuō),不允許向已關(guān)閉的ledger 中添加數(shù)據(jù)記錄(日志)。

Apache BookKeeper的概念和相關(guān)術(shù)語(yǔ)是什么

BookKeeper ledger:有界數(shù)據(jù) entries 序列

Stream(又稱日志流)是無(wú)界、無(wú)限的數(shù)據(jù)記錄序列。默認(rèn)情況下,stream 永遠(yuǎn)不會(huì)丟失。stream 和 ledger 有所不同。在追加記錄時(shí),ledger 只能運(yùn)行一次,而 stream 可以運(yùn)行多次。

一個(gè) stream 由多個(gè) ledger 組成;每個(gè) ledger 根據(jù)基于時(shí)間或空間的滾動(dòng)策略循環(huán)。在 stream 被刪除之前,stream 有可能存在相對(duì)較長(zhǎng)的時(shí)間(幾天、幾個(gè)月,甚至幾年)。Stream 的主要數(shù)據(jù)保留機(jī)制是截?cái)啵ǜ鶕?jù)基于時(shí)間或空間的保留策略刪除最早的 ledger。

Apache BookKeeper的概念和相關(guān)術(shù)語(yǔ)是什么

BookKeeper stream:無(wú)界數(shù)據(jù)記錄 stream

Ledger 和 stream 為歷史數(shù)據(jù)和實(shí)時(shí)數(shù)據(jù)提供統(tǒng)一的存儲(chǔ)抽象。在寫入數(shù)據(jù)時(shí),日志流流式傳輸或追尾傳輸實(shí)時(shí)數(shù)據(jù)記錄。存儲(chǔ)在 ledger 的實(shí)時(shí)數(shù)據(jù)成為歷史數(shù)據(jù)。累積在 stream 中的數(shù)據(jù)不受單機(jī)容量的限制。

??命名空間

通常情況下,用戶在命名空間分類、管理日志流。命名空間是租戶用來(lái)創(chuàng)建 stream 的一種機(jī)制,也是一個(gè)部署或管理單元。用戶可以配置命名空間級(jí)別的數(shù)據(jù)放置策略。

同一命名空間的所有 stream 都擁有相同的命名空間的設(shè)置,并將記錄存放在根據(jù)數(shù)據(jù)放置策略配置的存儲(chǔ)節(jié)點(diǎn)中。這為同時(shí)管理多個(gè) stream 的機(jī)制提供了強(qiáng)有力的支持。

??Bookies

Bookies 即存儲(chǔ)服務(wù)器。一個(gè) bookie 是一個(gè)單獨(dú)的 BookKeeper 存儲(chǔ)服務(wù)器,用于存儲(chǔ)數(shù)據(jù)記錄。BookKeeper 跨 bookies 復(fù)制并存儲(chǔ)數(shù)據(jù) entries。出于性能考慮,單個(gè) bookie 上存儲(chǔ) ledger 段,而不是整個(gè) ledger。

因此,bookie 就像是整個(gè)集成的一部分。對(duì)于任意給定 ledger L,集成指存儲(chǔ) L 中 entries 的一組 bookies。將 entries 寫入 ledger 時(shí),entries 就會(huì)跨集成分段(寫入 bookies 的一個(gè)分組而不是所有的 bookies)。

??元數(shù)據(jù)

BookKeeper 需要元數(shù)據(jù)存儲(chǔ)服務(wù),用來(lái)存儲(chǔ) ledger 與可用 bookie 的相關(guān)信息。目前,BookKeeper 利用ZooKeeper 來(lái)完成這項(xiàng)工作(除了數(shù)據(jù)存儲(chǔ)服務(wù)外,還包括一些協(xié)調(diào)、配置管理任務(wù)等)。

與 BookKeeper 交互

與 bookie 交互時(shí),BookKeeper 應(yīng)用程序有兩個(gè)主要作用:一個(gè)是創(chuàng)建 ledger 或 stream 以便寫入數(shù)據(jù);另一個(gè)是打開 ledger 或 stream 以便讀取數(shù)據(jù)。為了與 BookKeeper 中兩個(gè)不同的存儲(chǔ)原語(yǔ)交互,BookKeeper 提供了兩個(gè) API。

API說(shuō)明
Ledger API較低級(jí)別的 API,允許用戶直接與 ledger 交互,極具靈活性,用戶可根據(jù)需要與 bookie 交互。
Stream API較高級(jí)別、面向流的 API,通過(guò) Apache DistributedLog 實(shí)現(xiàn)。用戶無(wú)需管理與 ledger 交互的復(fù)雜性,就可以與 stream 交互。

選擇使用哪個(gè) API 取決于用戶對(duì) ledger 語(yǔ)義設(shè)定的的粒度控制程度。用戶也可以在單個(gè)應(yīng)用程序中同時(shí)使用這兩個(gè) API。

放在一起看

下圖即為 BookKeeper 的典型安裝示例。

Apache BookKeeper的概念和相關(guān)術(shù)語(yǔ)是什么

上圖中的幾個(gè)注意事項(xiàng):

  • 典型的 BookKeeper 安裝包括元數(shù)據(jù)存儲(chǔ)區(qū)(如 ZooKeeper)、bookie 集群,以及通過(guò)提供的客戶端庫(kù)與 bookie 交互的多個(gè)客戶端。
  • 為便于客戶端的識(shí)別,bookie 會(huì)將自己廣播到元數(shù)據(jù)存儲(chǔ)區(qū)。
  • Bookie 會(huì)與元數(shù)據(jù)存儲(chǔ)區(qū)交互,作為回收站收集已刪除數(shù)據(jù)。
  • 應(yīng)用程序通過(guò)提供的客戶端庫(kù)與 BookKeeper 交互(使用 ledger API 或 DistributedLog Stream API)
  • 應(yīng)用程序 1 需要對(duì) ledger 進(jìn)行粒度控制,以便直接使用 ledger API。
  • 應(yīng)用程序 2 不需要較低級(jí)別 ledger 控制,因此使用更加簡(jiǎn)化的日志流 API。

以上就是Apache BookKeeper的概念和相關(guān)術(shù)語(yǔ)是什么,小編相信有部分知識(shí)點(diǎn)可能是我們?nèi)粘9ぷ鲿?huì)見(jiàn)到或用到的。希望你能通過(guò)這篇文章學(xué)到更多知識(shí)。更多詳情敬請(qǐng)關(guān)注億速云行業(yè)資訊頻道。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI