如何進(jìn)行下一代分布式消息隊(duì)列ApachePulsar的分析-創(chuàng)新互聯(lián)

如何進(jìn)行下一代分布式消息隊(duì)列Apache Pulsar的分析,很多新手對(duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來(lái)學(xué)習(xí)下,希望你能有所收獲。

成都創(chuàng)新互聯(lián)-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價(jià)比枝江網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫(kù),直接使用。一站式枝江網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋枝江地區(qū)。費(fèi)用合理售后完善,10年實(shí)體公司更值得信賴。

Pulsar簡(jiǎn)介

Apache Pulsar是一個(gè)企業(yè)級(jí)的分布式消息系統(tǒng),最初由Yahoo開發(fā)并在2016年開源,目前正在Apache基金會(huì)下孵化。Plusar已經(jīng)在Yahoo的生產(chǎn)環(huán)境使用了三年多,主要服務(wù)于Mail、Finance、Sports、 Flickr、 the Gemini Ads platform、 Sherpa以及Yahoo的KV存儲(chǔ)。

Pulsar之所以能夠稱為下一代消息隊(duì)列,主要是因?yàn)橐韵绿匦?

  • 線性擴(kuò)展。能夠絲滑的擴(kuò)容到成百上千個(gè)節(jié)點(diǎn)(Kafka擴(kuò)容需要占用很多系統(tǒng)資源在節(jié)點(diǎn)間拷貝數(shù)據(jù),而Plusar完全不用)

  • 高吞吐。已經(jīng)在Yahoo的生產(chǎn)環(huán)境中經(jīng)受了考驗(yàn),每秒數(shù)百萬(wàn)消息

  • 低延遲。在大規(guī)模的消息量下依然能夠保持低延遲(< 5ms)

  • 持久化機(jī)制。Plusar的持久化機(jī)制構(gòu)建在Apache BookKeeper之上,提供了寫與讀之前的IO隔離

  • 基于地理位置的復(fù)制。Plusar將多地域/可用區(qū)的復(fù)制作為首要特性支持。用戶只需配置好可用區(qū),消息就會(huì)被源源不斷的復(fù)制到其他可用區(qū)。當(dāng)某一個(gè)可用區(qū)掛掉或者發(fā)生網(wǎng)絡(luò)分區(qū),plusar會(huì)在之后不斷的重試。

  • 部署方式的多樣化。既可以運(yùn)行在裸機(jī),也支持目前例如Docker、K8S的一些容器化方案以及不同的云廠商,同時(shí)在本地開發(fā)時(shí)也只需要一行命令即可啟動(dòng)整個(gè)環(huán)境。

  • Topic支持多種消費(fèi)模式:exclusive、shared、failover

架構(gòu)概述

從最上層來(lái)看,一個(gè)Plusar單元由若干個(gè)集群組成,單元內(nèi)的集群可以互相之前復(fù)制數(shù)據(jù), plusar中通常有以下幾種組件:

  • Broker:負(fù)責(zé)處理Producer發(fā)來(lái)的消息并分發(fā)給消費(fèi)者。通過(guò)一個(gè)全局的ZK集群來(lái)處理多種協(xié)作式任務(wù),例如說(shuō)基于地理位置的復(fù)制。并將消息存儲(chǔ)到BookKeeper中,同時(shí)單個(gè)集群內(nèi)也需要有一套ZK集群,來(lái)存儲(chǔ)一些元數(shù)據(jù)。

  • BookKeeper集群: 內(nèi)部包含多個(gè)bookies,用于持久化消息。

  • ZooKeeper集

如何進(jìn)行下一代分布式消息隊(duì)列Apache Pulsar的分析

Broker

在Kafka和RocketMQ中,Broker負(fù)責(zé)消息數(shù)據(jù)的存儲(chǔ)以及consumer消費(fèi)位移的存儲(chǔ)等,而Plusar中的broker和他們兩個(gè)有所不同,plusar中的broker是一個(gè)無(wú)狀態(tài)的節(jié)點(diǎn),主要負(fù)責(zé)三件事情:

  • 暴露REST接口用于執(zhí)行管理員的命令以及topic所有者的查詢等

  • 一個(gè)用于節(jié)點(diǎn)間通訊的異步的TCP服務(wù)器,協(xié)議目前采用的是Google之前開源的Protocol Buffer

  • 為了支持地域復(fù)制,broker會(huì)將自己 集群所在的消息發(fā)布到其他可用區(qū)。

消息會(huì)被先發(fā)布到BookKeeper中,然后會(huì)在Broker本地內(nèi)存中緩存一份,因此一般來(lái)說(shuō)消息的讀取都會(huì)從從內(nèi)存中讀取,因此第一條中所說(shuō)的查找topic所有者就是說(shuō),因?yàn)锽ookKeeper中的一個(gè)ledger只允許一個(gè)writer,因此我們可以調(diào)用rest接口獲取到某一個(gè)topic當(dāng)前的所有者。

BookKeeper

BookKeeper是一個(gè)可橫向擴(kuò)展的、錯(cuò)誤容忍的、低延遲的分布式存儲(chǔ)服務(wù),BookKeeper中最基本的單位是記錄,實(shí)際上就一個(gè)字節(jié)數(shù)組,而記錄的數(shù)組稱之為ledger,BK會(huì)將記錄復(fù)制到多個(gè)bookies,存儲(chǔ)ledger的節(jié)點(diǎn)叫做bookies,從而獲得更高的可用性和錯(cuò)誤容忍性。從設(shè)計(jì)階段BK就考慮到了各種故障,Bookies可以宕機(jī)、丟數(shù)據(jù)、臟數(shù)據(jù),但是主要整個(gè)集群中有足夠的Bookies服務(wù)的行為就是正確的。
在Pulsar中,每個(gè)分區(qū)topic是由若干個(gè)ledger組成的,而ledger是一個(gè)append-only的數(shù)據(jù)結(jié)構(gòu),只允許單個(gè)writer,ledger中的每條記錄會(huì)被復(fù)制到多個(gè)bookies中,一個(gè)ledger被關(guān)閉后(例如broker宕機(jī)了或者達(dá)到了一定的大小)就只支持讀取,而當(dāng)ledger中的數(shù)據(jù)不再需要的時(shí)候(例如所有的消費(fèi)者都已經(jīng)消費(fèi)了這個(gè)ledger中的消息)就會(huì)被刪除。

如何進(jìn)行下一代分布式消息隊(duì)列Apache Pulsar的分析

Bookkeeper的主要優(yōu)勢(shì)在于它可以保證在出現(xiàn)故障時(shí)在ledger的讀取一致性。因?yàn)閘edger只能被同時(shí)被一個(gè)writer寫入,因?yàn)闆](méi)有競(jìng)爭(zhēng),BK可以更高效的實(shí)現(xiàn)寫入。在Broker宕機(jī)后重啟時(shí),Plusar會(huì)啟動(dòng)一個(gè)恢復(fù)的操作,從ZK中讀取最后一個(gè)寫入的Ledger并讀取最后一個(gè)已提交的記錄,然后所有的消費(fèi)者也都被保證能看到同樣的內(nèi)容。

如何進(jìn)行下一代分布式消息隊(duì)列Apache Pulsar的分析

我們知道Kafka在0.8版本之前是將消費(fèi)進(jìn)度存儲(chǔ)到ZK中的,但是ZK本質(zhì)上基于單個(gè)日志的中心服務(wù),簡(jiǎn)單來(lái)講,ZK的性能不會(huì)隨著你增加更多的節(jié)點(diǎn)而線性增加,會(huì)只會(huì)相反減少,因?yàn)楦嗟墓?jié)點(diǎn)意味著需要將日志同步到更多的節(jié)點(diǎn),性能也會(huì)隨之下降,因此QPS也會(huì)受單機(jī)性能影響,因此0.8版本之后就將消費(fèi)進(jìn)度存儲(chǔ)到了Kafka的Topic中,而RocketMQ最初的版本也類似,有幾種不同的實(shí)現(xiàn)例如ZK、數(shù)據(jù)庫(kù)等,目前版本采用的是存儲(chǔ)到本機(jī)文件系統(tǒng)中,而Plusar采用了和Kafka類似的思想,Plusar將消費(fèi)進(jìn)度也存儲(chǔ)到了BK的ledger中。

如何進(jìn)行下一代分布式消息隊(duì)列Apache Pulsar的分析

元數(shù)據(jù)

Plusar中的元數(shù)據(jù)主要存儲(chǔ)到ZK中,例如不同可用區(qū)相關(guān)的配置會(huì)存在全局的ZK中,集群內(nèi)部的ZK用于存儲(chǔ)例如某個(gè)topic的數(shù)據(jù)寫入到了那些Ledger、Broker目前的一些埋點(diǎn)數(shù)據(jù)等等。

Plusar核心概念

Topic

發(fā)布訂閱系統(tǒng)中最核心的概念是topic,簡(jiǎn)單來(lái)說(shuō),topic可以理解為一個(gè)管道,producer可以往這個(gè)管道丟消息,consumer可以從這個(gè)管道的另一端讀取消息,但是這里可以有多個(gè)consumer同時(shí)從這個(gè)管道讀取消息。

如何進(jìn)行下一代分布式消息隊(duì)列Apache Pulsar的分析

每個(gè)topic可以劃分為多個(gè)分區(qū),同一個(gè)topic下的不同分區(qū)所包含的消息都是不同的。每個(gè)消息在被添加到一個(gè)分區(qū)后都會(huì)分配一個(gè)唯一的offset,在同一個(gè)分區(qū)內(nèi)消息是有序的,因此客戶端可以根據(jù)比如說(shuō)用戶ID進(jìn)行一個(gè)哈希取模從而使得整個(gè)用戶的消息都發(fā)往整個(gè)分區(qū),從而一定程度上避免race condition的問(wèn)題。
通過(guò)分區(qū),將大量的消息分散到不同的節(jié)點(diǎn)處理從而獲得高吞吐。默認(rèn)情況下,plusar的topic都是非分區(qū)的,但是支持通過(guò)cli或者接口創(chuàng)建一定分區(qū)數(shù)目的topic。

如何進(jìn)行下一代分布式消息隊(duì)列Apache Pulsar的分析

默認(rèn)情況下Plusar會(huì)自動(dòng)均衡Producer和Consumer,但有時(shí)候客戶端想要根據(jù)自己的業(yè)務(wù)規(guī)則也進(jìn)行路由,Plusar默認(rèn)支持以下幾種規(guī)則:單分區(qū)、輪詢、哈希、自定義(即自己實(shí)現(xiàn)相關(guān)接口來(lái)定制路由規(guī)則)

消費(fèi)模式

消費(fèi)決定了消息具體是如何被分發(fā)到消費(fèi)者的,Plusar支持幾種不同的消費(fèi)模式: exclusive、shared、failover。圖示如下:

如何進(jìn)行下一代分布式消息隊(duì)列Apache Pulsar的分析

  • Exclusive: 一個(gè)topic只能被一個(gè)消費(fèi)者消費(fèi)。Plusar默認(rèn)就是這個(gè)模式

  • Shared: 共享模式或者叫輪詢模式,多個(gè)消費(fèi)者可以連接到同一個(gè)topic,消息被依次分發(fā)給消費(fèi)者,當(dāng)一個(gè)消費(fèi)者宕機(jī)或者主動(dòng)斷開連接,那么發(fā)到那個(gè)消費(fèi)者的還沒(méi)有ack的消息會(huì)得到重新調(diào)度分發(fā)給其他消費(fèi)者。

  • Failover: 多個(gè)消費(fèi)者可以連接同一個(gè)topic并按照字典序排序,第一個(gè)消費(fèi)者會(huì)開始消費(fèi)消息,稱之為master,當(dāng)master斷開連接,所有未ack和隊(duì)列中剩下的消息會(huì)分發(fā)給另一個(gè)消費(fèi)者。

Plusar目前也支持另一種Reader接口,支持傳入一個(gè)消息ID,例如說(shuō)Message.Earliest來(lái)從最早的消息開始消費(fèi)。

看完上述內(nèi)容是否對(duì)您有幫助呢?如果還想對(duì)相關(guān)知識(shí)有進(jìn)一步的了解或閱讀更多相關(guān)文章,請(qǐng)關(guān)注創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司行業(yè)資訊頻道,感謝您對(duì)創(chuàng)新互聯(lián)的支持。

網(wǎng)站名稱:如何進(jìn)行下一代分布式消息隊(duì)列ApachePulsar的分析-創(chuàng)新互聯(lián)
分享URL:http://muchs.cn/article2/coseic.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信小程序、網(wǎng)站制作、手機(jī)網(wǎng)站建設(shè)、做網(wǎng)站、建站公司、關(guān)鍵詞優(yōu)化

廣告

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

成都定制網(wǎng)站建設(shè)