企業(yè)級發(fā)布訂閱(pub-sub)消息系統(tǒng)-Apache Pulsar
Apache Pulsar,是一個(gè)企業(yè)級的分布式消息系統(tǒng),最初由Yahoo開發(fā)并在2016年開源,目前正在Apache基金會下孵化。Plusar已經(jīng)在Yahoo的生產(chǎn)環(huán)境使用了三年多,主要服務(wù)于Mail、Finance、Sports、 Flickr、 the Gemini Ads platform、 Sherpa以及Yahoo的KV存儲。它是一個(gè)由持久存儲(使用Apache Bookkeeper)支持的pub-sub消息傳遞平臺,具有以下特性:
地域復(fù)制
多租戶
零數(shù)據(jù)丟失
零重新平衡時(shí)間
統(tǒng)一排隊(duì)和流媒體模型
高度可擴(kuò)展
高吞吐量
Pulsar代理
Functions
SQL
更多詳細(xì)信息可查看官方詳細(xì)文檔。
架構(gòu)
在最高層, 一個(gè)Pulsar實(shí)例由一個(gè)或多個(gè)Pulsar集群組成。實(shí)例中的群集之間可以相互復(fù)制數(shù)據(jù)。
一個(gè)Pulsar集群由下面三部分組成:
一個(gè)或者多個(gè)brokers負(fù)責(zé)處理和負(fù)載均衡從生產(chǎn)者源源不斷發(fā)送出的消息,并將他們發(fā)送給消費(fèi)者。它與配置存儲交互來處理相應(yīng)的任務(wù),它將消息存儲在BookKeeper實(shí)例中(aka bookies)。它依賴ZooKeeper集群處理特定的任務(wù),等等。
一個(gè)包含一個(gè)或者多個(gè)Bookies的BookKeeper,這個(gè)BookKeeper主要負(fù)責(zé)消息的 持久化存儲
用于Pulsar集群操作的該P(yáng)ulsar集群獨(dú)有的ZooKeeper
以下是上圖中的亮點(diǎn),讓我們選擇Pulsar:
1、負(fù)載均衡器:Pulsar具有內(nèi)置負(fù)載均衡器,可在內(nèi)部向所有代理分配負(fù)載。
2、服務(wù)發(fā)現(xiàn):Pulsar內(nèi)置服務(wù)發(fā)現(xiàn),以確定使用單個(gè)端點(diǎn)連接到代理的位置和方式。
3、全局復(fù)制器:幫助在命名空間配置的n代理之間復(fù)制數(shù)據(jù)。
4、全局ZK:Global Zookeeper有助于實(shí)現(xiàn)地理復(fù)制。
特性
地理復(fù)制是Pubsar的開箱即用解決方案。可以在命名空間級別配置全局集群,以便在任意數(shù)量的集群中復(fù)制它(n路網(wǎng)格解決方案)。從以下示例中,數(shù)據(jù)中心C沒有使用者,但仍然根據(jù)訂閱模型在數(shù)據(jù)中心A或B中使用消息。
Pulsar有一個(gè)租戶的概念。租戶可以跨群集傳播,每個(gè)都可以應(yīng)用自己的身份驗(yàn)證和授權(quán)方案。它們也是可以管理存儲配額,消息TTL和隔離策略的管理單元。
通過多租戶功能為數(shù)據(jù)存儲提供隔離,有助于為企業(yè)建立一個(gè)集群。這種內(nèi)置功能將大大降低組織的基礎(chǔ)架構(gòu)和運(yùn)營成本。
Pulsar的分層架構(gòu)和broker的無國籍性質(zhì)有助于實(shí)現(xiàn)零重新平衡時(shí)間。如果將新broker添加到群集,則它立即可用于寫入和讀取; 不會花費(fèi)任何時(shí)間在群集中重新平衡數(shù)據(jù)。
從Bookies的角度來看:當(dāng)一個(gè)新的bookie被添加到集群中時(shí); 由于其基礎(chǔ)分布式日志架構(gòu) - 讀/寫隔離,它立即為任何寫入做好準(zhǔn)備。基于段復(fù)制配置的數(shù)據(jù)重新平衡將在幕后進(jìn)行,而不會影響群集。
Pulsar在一個(gè)模型中支持流式和排隊(duì)語義。此功能可以通過訂閱模型實(shí)現(xiàn)。消費(fèi)者使用任何一種訂閱模型訂閱該主題:
1、獨(dú)占(exclusive) - 支持流語義
2、故障轉(zhuǎn)移(failover) - 支持流語義
3、共享(shared) - 支持排隊(duì)語義
Pulsar Functions,一套基于無服務(wù)器化(Serverless)的輕量級計(jì)算框架。這套計(jì)算框架為數(shù)據(jù)科學(xué)家提供了最為簡便的方式進(jìn)行流計(jì)算邏輯的編寫。學(xué)習(xí)成本基本為零,只要能寫 Java 或者 Python 的函數(shù),就可以編寫在 Pulsar 進(jìn)行流計(jì)算的邏輯。
基于 Pulsar Functions 的架構(gòu)和 serverless 的理念,實(shí)現(xiàn)了一套無服務(wù)器化的連接器(Connectors)框架 Pulsar IO。Pulsar IO 提供了簡化了 Pulsar 和流生態(tài)環(huán)境的鏈接。用戶不需要編寫任何的代碼,只需要準(zhǔn)備一個(gè)簡單的配置文件。并且提供了對連接器的自動(dòng)的容錯(cuò)管理,負(fù)載均衡,隨著負(fù)載自動(dòng)伸縮擴(kuò)容等,極其簡化了用戶的使用。
目前已經(jīng)提供的連接器包括:
Kafka
Kinesis
RabbitMQ
Elastic-search
HDFS
Aerospike
JDBC 等。
當(dāng)部署在云或Kubernetes中時(shí),需要使用Proxy將borker暴露給外界。Proxy本身可以提供身份驗(yàn)證和授權(quán),并在TLS或沒有TLS的情況下與代理無縫連接。Proxy具有內(nèi)置功能,可將授權(quán)令牌傳遞給Proxy以進(jìn)行命名空間權(quán)限驗(yàn)證。
Pulsar存儲-分布式存儲系統(tǒng)Apache BookKeeper
Pulsar用 Apache BookKeeper作為持久化存儲。 BookKeeper是一個(gè)分布式的預(yù)寫日志(WAL)系統(tǒng),有如下幾個(gè)特性特別適合Pulsar的應(yīng)用場景:
能讓Pulsar創(chuàng)建多個(gè)獨(dú)立的日志,這種獨(dú)立的日志就是ledgers. 隨著時(shí)間的推移,Pulsar會為Topic創(chuàng)建多個(gè)ledgers。
為按條目復(fù)制的順序數(shù)據(jù)提供了非常高效的存儲。
保證了多系統(tǒng)掛掉時(shí)ledgers的讀取一致性。
提供不同的Bookies之間均勻的IO分布的特性。
容量和吞吐量都能水平擴(kuò)展。并且容量可以通過在集群內(nèi)添加更多的Bookies立刻提升。
Bookies被設(shè)計(jì)成可以承載數(shù)千的并發(fā)讀寫的ledgers。 使用多個(gè)磁盤設(shè)備,一個(gè)用于日志,另一個(gè)用于一般存儲,這樣Bookies可以將讀操作的影響和對于寫操作的延遲分隔開。
Pulsar SQL
Pulsar的一個(gè)常見用例是存儲事件數(shù)據(jù)流。通常,事件數(shù)據(jù)由預(yù)定義字段構(gòu)成。用戶能夠查詢已存儲在Pulsar主題中的現(xiàn)有數(shù)據(jù)具有巨大的價(jià)值。通過Schema Registry的實(shí)現(xiàn),結(jié)構(gòu)化數(shù)據(jù)可以存儲在Pulsar中,并允許通過SQL語言查詢該數(shù)據(jù)。
通過利用Presto,我們創(chuàng)建了一種方法,使用戶能夠以非常有效和可擴(kuò)展的方式查詢存儲在Pulsar中的結(jié)構(gòu)化數(shù)據(jù)。我們將在下面的性能部分討論為什么這個(gè)非常有效和可擴(kuò)展。
Pulsar SQL的核心是Presto Pulsar連接器,它允許Presto集群中的Presto工作人員從Pulsar查詢數(shù)據(jù)。
Apache Pulsar 實(shí)時(shí)場景的應(yīng)用
實(shí)時(shí)數(shù)據(jù)處理在各個(gè)行業(yè)和領(lǐng)域中已經(jīng)變得越來越關(guān)鍵。但是在實(shí)時(shí)數(shù)據(jù)棧中,Messaging,Computing和Storage三個(gè)部分的分離,給方案的實(shí)現(xiàn)帶來了高復(fù)雜性,低可維護(hù)性,低效率等問題。
Apache Pulsar在這三個(gè)方面上提供一個(gè)端到端的實(shí)時(shí)數(shù)據(jù)解決方案。
1、Messaging:Pulsar對pub/sub和queue兩種模式提供統(tǒng)一的支持,同時(shí)保證了一致性,高性能和易擴(kuò)展性。
2、Computing:Pulsar內(nèi)部的Pulsar-Functions提供了Stream-native的輕量級計(jì)算框架,保證了數(shù)據(jù)的即時(shí)流式處理。
3、Storage:Pulsar借助Apache BookKeeper提供了以segment為中心的存儲架構(gòu),保證了存儲的性能,持久性和彈性。
與Kafka對比
Pulsar被稱為下一代消息隊(duì)列,那它與kafka之間都有哪些異同點(diǎn)呢?請看下表:
對比總結(jié):
Apache Pulsar將高性能流(Apache Kafka追求)和靈活的傳統(tǒng)排隊(duì)(RabbitMQ追求)結(jié)合到一個(gè)統(tǒng)一的消息傳遞模型和API中。Pulsar 使用統(tǒng)一的API 為您提供一個(gè)流式和排隊(duì)系統(tǒng),具有相同的高性能。
總結(jié)
Apache Pulsar是一個(gè)功能強(qiáng)大的pub-sub模型,基于分層架構(gòu),開箱即用,具有Geo-Replication,多重租戶,零重新平衡時(shí)間,統(tǒng)一排隊(duì)和流,基于TLS的身份驗(yàn)證/授權(quán),代理和持久性。
Apache 分布式消息隊(duì)列 RabbitMQ
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。