Apache Pulsar 多層抽象layer2-邏輯存儲體系

Pulsar中的邏輯存儲體系使用的是Apache BookKeeper。本文僅在Pulsar的背景下介紹BookKeeper。

image.png

BookKeeper將數據存儲至集群中的節點上,每個BookKeeper節點稱為Bookie。Pulsar和BookKeeper都使用Apache Zookeeper來存儲元數據和監控節點健康狀況。

image.png

Bookkeeper自身就可以組成一個集群,這個集群是 Client-Server 模型,集群的 metadata 可以利用一個 Ledger 語義存儲(參考),在 Client 層面保證 各個 Bookie 之間的數據一致性。Pulsar 則是一種 Client-Proxy-Server 模型,基于 Broker 這個 Proxy 來保證一個 Topic Parition 內的數據一致性。

image.png

Pulsar 的底層數據 以 Ledger(上圖中的 Segment 就是 Ledger) 形式存儲在多個 BookKeeper 上,當集群擴容添加 Bookies 后,Pulsar 會在新的 Bookie 上創建新的 Segment(即 Bookeeper 的 Ledger),所以不需要再擴容時候像 Kafka 一樣進行 Rebalance 操作,其結果就是 Fragments跨多個Bookies以帶狀分布。但是這樣的結果就是同一個 Ledger 的 Fragments 分布在多個 Bookie 上,導致讀取和寫入會在多個 Bookies 之間跳躍。Topic的 Ledger 和 Fragment 之間映射關系等元數據存儲在 Zookeeper 中,Pulsar Broker 需要實時跟蹤這些關系進行讀寫流程。

Pulsar 有一個 Ledger的所有權(ownership) 的概念,其意義為某個 Ledger 數據所在的 Bookie。除去創建新 Ledger 的情況,當集群擴容 Pulsar 把數據寫入新的 Bookie 或者 當前Fragment使用Bookies發生寫入錯誤或超時 時,Ledger的所有權 都會發生改變。


image.png

上圖描述了 Bookie 集群擴容的情況。圖中 Bookie X 和 Bookie Y 被添加到集群中,Broker 根據 IDC、機架、各個 Bookie 的容量等信息根據各種策略把 Segment X+1 和 X+2 存儲到兩個 Bookie 節點中,最終確保群集中各個 Bookie 之間的流量均衡。

image.png

上圖描述了 Bookie 2 發生故障時,其 Segment 4 的修復過程。Broker 2 選取 Bookie 1 作為 Segment 4 的副本集,然后由 Bookie 自己的 Auditor 線程完成數據復制工作,整個過程對 Broker 和應用透明,功能的可用性不受影響。

每個Ledger有三個關鍵配置:
Ensemble Size (E)
Write Quorum Size (Qw)
Ack Quorum Size (Qa)

這些配置應用到Topic級別,然后pulsar會在Topic使用的BookKeeper Ledgers/Fragments上設置。

注意:Ensemble表示將要寫入的實際的Bookies數量,以下用E表示。E表示Pulsar需要使用的Bookies數量。在配置時您至少需要E個bookies才能正常的使用。默認情況下,從可用的bookies列表中隨機選取E個bookies(每個bookie在Zookeeper中注冊自己)。

Ensemble Size (E) 決定了Pulsar寫入Ledger可用的Bookies池的大小。每個Fragment可以有不同的Bookies列表,Broker將在創建Fragment時選擇一組Bookies,E的數量是一致的。必有足夠的Bookies數量(> E)。

Write Quorum (Qw) 是Pulsar將要寫入的實際的Bookies數量。可以等于或者小于E。


image.png

當Qw小于E時,以條帶化的方式分配讀/寫即每個Bookie只提供讀寫請求的子集。


image.png

如上圖,Bookie Ensemble 數目是 5,Qw 為 3,Broker 可以用這種條帶化方式把數據 Entry x 寫入各個 Bookie。每個 Bookie 有一個 Auditor 線程跟蹤自身負責的 Entry 集合是否有數據副本缺失【如當 Bookie 1 接收到 Entry 6 時,Auditor 會檢測 Entry 5 是否已經收到】,當其發現數據有缺失的時候會從副本集中其他副本復制數據。

Ack Quorum (Qa) 是確認寫入Bookies的數量,Pulsar Broker將確認發送給客戶端。為了一致性,Qa應該是:(Qw + 1) / 2 或者更大。

(Qa == Qw) 或(Qa == Qw - 1) ---> 這樣避免單節點響應緩慢而改善寫入延遲。

當創建一個新的Topic或者Ledger滾動時會創建一個新的Ledger。Ledger在以下這些情況會發生滾動并創建新的Ledger:

  • 已達到Ledger的大小或時間限制。
  • Ledger的所有權(Pulsar Broker的所有權)發生變化(稍后會詳細介紹)。

以下情況會創建新的Fragment:

  • 創建新的Ledger。
  • 當前Fragment使用Bookies發生寫入錯誤或超時。

對比

1 kafka

kafka模型的優點在于簡單快捷。所有讀寫都是順序的。不好的是,單個節點必須有足夠的磁盤空間來處理副本,因此非常大的副本可能會迫使你是用非常大的磁盤。第二個缺點是,在集群擴展時必須做Rebalance。這個過程是比較痛苦的,需要良好的計劃和執行來保證沒有任何故障的情況下分散節點的存儲壓力。

2 pulsar

Pulsar + BookKeeper模型。Topic中的數據分布在多個Bookies上。Topic被分割成Ledgers,Ledgers被分割成Fragments分布在Fragment使用的Bookies上。當需要做集群擴展時,只需添加更多Bookies,它們就會在創建新的Fragment時開始在的Bookies上寫入數據,不再需要kafka的Rebalance操作。但是,讀取和寫入是在Bookies之間跳躍。

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,362評論 6 537
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,013評論 3 423
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,346評論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,421評論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,146評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,534評論 1 325
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,585評論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,767評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,318評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,074評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,258評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,828評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,486評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,916評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,156評論 1 290
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,993評論 3 395
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,234評論 2 375