ApachePulsar的系統(tǒng)架構(gòu)及設(shè)計理念是什么

今天就跟大家聊聊有關(guān)Apache Pulsar的系統(tǒng)架構(gòu)及設(shè)計理念是什么,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。

超過10年行業(yè)經(jīng)驗,技術(shù)領(lǐng)先,服務(wù)至上的經(jīng)營模式,全靠網(wǎng)絡(luò)和口碑獲得客戶,為自己降低成本,也就是為客戶降低成本。到目前業(yè)務(wù)范圍包括了:成都網(wǎng)站制作、成都網(wǎng)站設(shè)計,成都網(wǎng)站推廣,成都網(wǎng)站優(yōu)化,整體網(wǎng)絡(luò)托管,小程序定制開發(fā),微信開發(fā),APP應(yīng)用開發(fā),同時也可以讓客戶的網(wǎng)站和網(wǎng)絡(luò)營銷和我們一樣獲得訂單和生意!

我們將介紹Apache Pulsar背后的一些系統(tǒng)架構(gòu)和設(shè)計理念,并最后與Apache Kafka的架構(gòu)進(jìn)行一些比較。

Pulsar的分層架構(gòu)

Apache Pulsar和其他消息系統(tǒng)最根本的不同是采用分層架構(gòu)。 Apache Pulsar集群由兩層組成:無狀態(tài)服務(wù)層,由一組接收和傳遞消息的Broker組成;以及一個有狀態(tài)持久層,由一組名為bookies的Apache BookKeeper存儲節(jié)點組成,可持久化地存儲消息。 下圖顯示了Apache Pulsar的典型部署。

Apache Pulsar的系統(tǒng)架構(gòu)及設(shè)計理念是什么

在Pulsar客戶端中提供生產(chǎn)者和消費者(Producer & Consumer)接口,應(yīng)用程序使用Pulsar客戶端連接到Broker來發(fā)布和消費消息。
Pulsar客戶端不直接與存儲層Apache BookKeeper交互。 客戶端也沒有直接的Zookeeper訪問權(quán)限。這種隔離,為Pulsar實現(xiàn)安全的多租戶統(tǒng)一身份驗證模型提供了基礎(chǔ)。
Apache Pulsar為客戶端提供多種語言的支持,包括Java,C ++,Python,Go和Websockets。
Apache Pulsar還提供了一組兼容Kafka的API,用戶可以通過簡單地更新依賴關(guān)系并將客戶端指向Pulsar集群來遷移現(xiàn)有的Kafka應(yīng)用程序,這樣現(xiàn)有的Kafka應(yīng)用程序可以立即與Apache Pulsar一起使用,無需更改任何代碼。

Broker層--無狀態(tài)服務(wù)層


Broker集群在Apache Pulsar中形成無狀態(tài)服務(wù)層。服務(wù)層是“無狀態(tài)的”,因為Broker實際上并不在本地存儲任何消息數(shù)據(jù)。有關(guān)Pulsar主題的消息,都被存儲在分布式日志存儲系統(tǒng)(Apache BookKeeper)中。我們將在下一節(jié)中更多地討論BookKeeper。
每個主題分區(qū)(Topic Partition)由Pulsar分配給某個Broker,該Broker稱為該主題分區(qū)的所有者。 Pulsar生產(chǎn)者和消費者連接到主題分區(qū)的所有者Broker,以向所有者代理發(fā)送消息并消費消息。

如果一個Broker失敗,Pulsar會自動將其擁有的主題分區(qū)移動到群集中剩余的某一個可用Broker中。這里要說的一件事是:由于Broker是無狀態(tài)的,當(dāng)發(fā)生Topic的遷移時,Pulsar只是將所有權(quán)從一個Broker轉(zhuǎn)移到另一個Broker,在這個過程中,不會有任何數(shù)據(jù)復(fù)制發(fā)生。

下圖顯示了一個擁有4個Broker的Pulsar集群,其中4個主題分區(qū)分布在4個Broker中。每個Broker擁有并為一個主題分區(qū)提供消息服務(wù)。

Apache Pulsar的系統(tǒng)架構(gòu)及設(shè)計理念是什么

BookKeeper層--持久化存儲層


Apache BookKeeper是Apache Pulsar的持久化存儲層。 Apache Pulsar中的每個主題分區(qū)本質(zhì)上都是存儲在Apache BookKeeper中的分布式日志。

每個分布式日志又被分為Segment分段。 每個Segment分段作為Apache BookKeeper中的一個Ledger,均勻分布并存儲在BookKeeper群集中的多個Bookie(Apache BookKeeper的存儲節(jié)點)中。
Segment的創(chuàng)建時機(jī)包括以下幾種:基于配置的Segment大??;基于配置的滾動時間;或者當(dāng)Segment的所有者被切換。

通過Segment分段的方式,主題分區(qū)中的消息可以均勻和平衡地分布在群集中的所有Bookie中。 這意味著主題分區(qū)的大小不僅受一個節(jié)點容量的限制; 相反,它可以擴(kuò)展到整個BookKeeper集群的總?cè)萘俊?/p>

下面的圖說明了一個分為x個Segment段的主題分區(qū)。 每個Segment段存儲3個副本。 所有Segment都分布并存儲在4個Bookie中。

Apache Pulsar的系統(tǒng)架構(gòu)及設(shè)計理念是什么

Segment為中心的存儲

存儲服務(wù)的分層的架構(gòu) 和 以Segment為中心的存儲 是Apache Pulsar(使用Apache BookKeeper)的兩個關(guān)鍵設(shè)計理念。 這兩個基礎(chǔ)為Pulsar提供了許多重要的好處:

  • 無限制的主題分區(qū)存儲

  • 即時擴(kuò)展,無需數(shù)據(jù)遷移

    • 無縫Broker故障恢復(fù)

    • 無縫集群擴(kuò)展

    • 無縫的存儲(Bookie)故障恢復(fù)

  • 獨立的可擴(kuò)展性

下面我們分別展開來看著幾個好處。

無限制的主題分區(qū)存儲

由于主題分區(qū)被分割成Segment并在Apache BookKeeper中以分布式方式存儲,因此主題分區(qū)的容量不受任何單一節(jié)點容量的限制。 相反,主題分區(qū)可以擴(kuò)展到整個BookKeeper集群的總?cè)萘?,只需添加Bookie節(jié)點即可擴(kuò)展集群容量。 這是Apache Pulsar支持存儲無限大小的流數(shù)據(jù),并能夠以高效,分布式方式處理數(shù)據(jù)的關(guān)鍵。 使用Apache BookKeeper的分布式日志存儲,對于統(tǒng)一消息服務(wù)和存儲至關(guān)重要。

即時擴(kuò)展,無需數(shù)據(jù)遷移

由于消息服務(wù)和消息存儲分為兩層,因此將主題分區(qū)從一個Broker移動到另一個Broker幾乎可以瞬時內(nèi)完成,而無需任何數(shù)據(jù)重新平衡(將數(shù)據(jù)從一個節(jié)點重新復(fù)制到另一個節(jié)點)。 這一特性對于高可用的許多方面至關(guān)重要,例如集群擴(kuò)展;對Broker和Bookie失敗的快速應(yīng)對。 我將使用例子在下文更詳細(xì)地進(jìn)行解釋。

  • 無縫Broker故障恢復(fù)

下圖說明了Pulsar如何處理Broker失敗的示例。 在例子中Broker 2因某種原因(例如停電)而斷開。 Pulsar檢測到Broker 2已關(guān)閉,并立即將Topic1-Part2的所有權(quán)從Broker 2轉(zhuǎn)移到Broker 3。在Pulsar中數(shù)據(jù)存儲和數(shù)據(jù)服務(wù)分離,所以當(dāng)代理3接管Topic1-Part2的所有權(quán)時,它不需要復(fù)制Partiton的數(shù)據(jù)。 如果有新數(shù)據(jù)到來,它立即附加并存儲為Topic1-Part2中的Segment x + 1。 Segment x + 1被分發(fā)并存儲在Bookie1, 2和4上。因為它不需要重新復(fù)制數(shù)據(jù),所以所有權(quán)轉(zhuǎn)移立即發(fā)生而不會犧牲主題分區(qū)的可用性。

Apache Pulsar的系統(tǒng)架構(gòu)及設(shè)計理念是什么

  • 無縫集群容量擴(kuò)展

下圖說明了Pulsar如何處理集群的容量擴(kuò)展。 當(dāng)Broker 2將消息寫入Topic1-Part2的Segment X時,將Bookie X和Bookie Y添加到集群中。 Broker 2立即發(fā)現(xiàn)新加入的Bookies X和Y。然后Broker將嘗試將Segment X + 1和X + 2的消息存儲到新添加的Bookie中。 新增加的Bookie立刻被使用起來,流量立即增加,而不會重新復(fù)制任何數(shù)據(jù)。 除了機(jī)架感知和區(qū)域感知策略之外,Apache BookKeeper還提供資源感知的放置策略,以確保流量在群集中的所有存儲節(jié)點之間保持平衡。

Apache Pulsar的系統(tǒng)架構(gòu)及設(shè)計理念是什么

  • 無縫的存儲(Bookie)故障恢復(fù)

下圖說明了Pulsar(通過Apache BookKeeper)如何處理bookie的磁盤故障。 這里有一個磁盤故障導(dǎo)致存儲在bookie 2上的Segment 4被破壞。Apache BookKeeper后臺會檢測到這個錯誤并進(jìn)行復(fù)制修復(fù)。

Apache Pulsar的系統(tǒng)架構(gòu)及設(shè)計理念是什么

Apache BookKeeper中的副本修復(fù)是Segment(甚至是Entry)級別的多對多快速修復(fù),這比重新復(fù)制整個主題分區(qū)要精細(xì),只會復(fù)制必須的數(shù)據(jù)。 這意味著Apache BookKeeper可以從bookie 3和bookie 4讀取Segment 4中的消息,并在bookie 1處修復(fù)Segment 4。所有的副本修復(fù)都在后臺進(jìn)行,對Broker和應(yīng)用透明。
即使有Bookie節(jié)點出錯的情況發(fā)生時,通過添加新的可用的Bookie來替換失敗的Bookie,所有Broker都可以繼續(xù)接受寫入,而不會犧牲主題分區(qū)的可用性。

獨立的可擴(kuò)展性

由于消息服務(wù)層和持久存儲層是分開的,因此Apache Pulsar可以獨立地擴(kuò)展存儲層和服務(wù)層。這種獨立的擴(kuò)展,更具成本效益:

當(dāng)您需要支持更多的消費者或生產(chǎn)者時,您可以簡單地添加更多的Broker。主題分區(qū)將立即在Brokers中做平衡遷移,一些主題分區(qū)的所有權(quán)立即轉(zhuǎn)移到新的Broker。

當(dāng)您需要更多存儲空間來將消息保存更長時間時,您只需添加更多Bookie。通過智能資源感知和數(shù)據(jù)放置,流量將自動切換到新的Bookie中。 Apache Pulsar中不會涉及到不必要的數(shù)據(jù)搬遷,不會將舊數(shù)據(jù)從現(xiàn)有存儲節(jié)點重新復(fù)制到新存儲節(jié)點。

和Kafka的對比

Apache Kafka和Apache Pulsar都有類似的消息概念。 客戶端通過主題與消息系統(tǒng)進(jìn)行交互。 每個主題都可以分為多個分區(qū)。 然而,Apache Pulsar和Apache Kafka之間的根本區(qū)別在于Apache Kafka是以分區(qū)為存儲中心,而Apache Pulsar是以Segment為存儲中心。

Apache Pulsar的系統(tǒng)架構(gòu)及設(shè)計理念是什么

上圖顯示了以分區(qū)為中心和以Segment為中心的系統(tǒng)之間的差異。
在Apache Kafka中,分區(qū)只能存儲在單個節(jié)點上并復(fù)制到其他節(jié)點,其容量受最小節(jié)點容量的限制。這意味著容量擴(kuò)展需要對分區(qū)重新平衡,這反過來又需要重新復(fù)制整個分區(qū),以平衡新添加的代理的數(shù)據(jù)和流量。
重新傳輸數(shù)據(jù)非常昂貴且容易出錯,并且會消耗網(wǎng)絡(luò)帶寬和I/O。維護(hù)人員在執(zhí)行此操作時必須非常小心,以避免破壞生產(chǎn)系統(tǒng)。

Kafka中分區(qū)數(shù)據(jù)的重新拷貝不僅發(fā)生在以分區(qū)為中心的系統(tǒng)中的群集擴(kuò)展上。許多其他事情也會觸發(fā)數(shù)據(jù)重新拷貝,例如副本故障,磁盤故障或計算機(jī)的故障。在數(shù)據(jù)重新復(fù)制期間,分區(qū)通常不可用,直到數(shù)據(jù)重新復(fù)制完成。例如,如果您將分區(qū)配置為存儲為3個副本,這時,如果丟失了一個副本,則必須重新復(fù)制完整個分區(qū)后,分區(qū)才可以再次可用。

在用戶遇到故障之前,通常會忽略這種缺陷,因為許多情況下,在短時間內(nèi)僅是對內(nèi)存中緩存數(shù)據(jù)的讀取。當(dāng)數(shù)據(jù)被保存到磁盤后,用戶將越來越多地不可避免地遇到數(shù)據(jù)丟失,故障恢復(fù)的問題,特別是在需要將數(shù)據(jù)長時間保存的場合。

相反,在Apache Pulsar中,同樣是以分區(qū)為邏輯單元,但是以Segment為物理存儲單元。分區(qū)隨著時間的推移會進(jìn)行分段,并在整個集群中均衡分布,旨在有效地迅速地擴(kuò)展。
Pulsar是以Segment為中心的,因此在擴(kuò)展容量時不需要數(shù)據(jù)重新平衡和拷貝,舊數(shù)據(jù)不會被重新復(fù)制,這要歸功于在Apache BookKeeper中使用可擴(kuò)展的以Segment為中心的分布式日志存儲系統(tǒng)。

通過利用分布式日志存儲,Pulsar可以最大化Segment放置選項,實現(xiàn)高寫入和高讀取可用性。 例如,使用BookKeeper,副本設(shè)置等于2,只要任何2個Bookie啟動,就可以對主題分區(qū)進(jìn)行寫入。 對于讀取可用性,只要主題分區(qū)的副本集中有1個處于活動狀態(tài),用戶就可以讀取它,而不會出現(xiàn)任何不一致。

看完上述內(nèi)容,你們對Apache Pulsar的系統(tǒng)架構(gòu)及設(shè)計理念是什么有進(jìn)一步的了解嗎?如果還想了解更多知識或者相關(guān)內(nèi)容,請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝大家的支持。

網(wǎng)站欄目:ApachePulsar的系統(tǒng)架構(gòu)及設(shè)計理念是什么
網(wǎng)站鏈接:http://www.muchs.cn/article44/jpjihe.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站建設(shè)、響應(yīng)式網(wǎng)站、網(wǎng)站策劃、微信公眾號、標(biāo)簽優(yōu)化、網(wǎng)站設(shè)計

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

手機(jī)網(wǎng)站建設(shè)