溫馨提示×

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

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

如何進(jìn)行Apache Pulsar分析

發(fā)布時(shí)間:2021-11-23 10:57:14 來源:億速云 閱讀:216 作者:柒染 欄目:大數(shù)據(jù)

如何進(jìn)行Apache Pulsar分析,針對(duì)這個(gè)問題,這篇文章詳細(xì)介紹了相對(duì)應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問題的小伙伴找到更簡(jiǎn)單易行的方法。

Apache Pulsar(孵化器項(xiàng)目)是一個(gè)企業(yè)級(jí)的發(fā)布訂閱(pub-sub)消息系統(tǒng),最初由Yahoo開發(fā),并于2016年底開源,現(xiàn)在是Apache軟件基金會(huì)的一個(gè)孵化器項(xiàng)目。Pulsar在Yahoo的生產(chǎn)環(huán)境運(yùn)行了三年多,助力Yahoo的主要應(yīng)用,如Yahoo Mail、Yahoo Finance、Yahoo Sports、Flickr、Gemini廣告平臺(tái)和Yahoo分布式鍵值存儲(chǔ)系統(tǒng)Sherpa。

概念與術(shù)語

向Pulsar發(fā)送數(shù)據(jù)的應(yīng)用程序叫作生產(chǎn)者(producer),而從Pulsar讀取數(shù)據(jù)的應(yīng)用程序叫作消費(fèi)者(consumer)。有時(shí)候消費(fèi)者也被叫作訂閱者。主題(topic)是Pulsar的核心資源,一個(gè)主題可以被看成是一個(gè)通道,消費(fèi)者向這個(gè)通道發(fā)送數(shù)據(jù),消費(fèi)者從這個(gè)通道拉取數(shù)據(jù)。

如何進(jìn)行Apache Pulsar分析

圖1:生產(chǎn)者、消費(fèi)者和主題

構(gòu)建Pulsar的目的是為了支持多租戶(multi-tenant)應(yīng)用場(chǎng)景。Pulsar的多租戶機(jī)制包含了兩種資源:資產(chǎn)(property)和命名空間(namespace)。資產(chǎn)代表系統(tǒng)里的租戶。假設(shè)有一個(gè)Pulsar集群用于支持多個(gè)應(yīng)用程序(就像Yahoo那樣),集群里的每個(gè)資產(chǎn)可以代表一個(gè)組織的團(tuán)隊(duì)、一個(gè)核心的功能或一個(gè)產(chǎn)品線。一個(gè)資產(chǎn)可以包含多個(gè)命名空間,一個(gè)命名空間可以包含任意個(gè)主題。

?如何進(jìn)行Apache Pulsar分析

圖2:Pulsar各個(gè)組件間的關(guān)系

命名空間是Pulsar最基本的管理單元。在命名空間層面,我們可以設(shè)置權(quán)限、調(diào)整復(fù)制選項(xiàng)、管理跨集群的數(shù)據(jù)復(fù)制、控制消息的過期時(shí)間或執(zhí)行其他關(guān)鍵任務(wù)。命名空間里的主題會(huì)繼承命名空間的配置,所以我們可以一次性對(duì)同一個(gè)命名空間內(nèi)的所有主題進(jìn)行配置。命名空間可以分為兩種:

- 本地(local)——本地命名空間只在集群內(nèi)可見。

- 全局(global)——命名空間對(duì)多個(gè)集群可見,可以是同一個(gè)數(shù)據(jù)中心內(nèi)的集群,也可以是跨地域數(shù)據(jù)中心的集群。該功能取決于是否啟用了集群復(fù)制功能。

雖然本地命名空間和全局命名空間的作用域不同,但它們都可以在不同的團(tuán)隊(duì)或不同的組織內(nèi)共享。如果應(yīng)用程序獲得了命名空間的寫入權(quán)限,就可以往該命名空間內(nèi)的所有主題寫入數(shù)據(jù)。如果寫入的主題不存在,就會(huì)創(chuàng)建該主題。

每個(gè)命名空間可以包含一到多個(gè)主題,每個(gè)主題可以有多個(gè)訂閱者,每個(gè)訂閱者可以接收所有發(fā)布到該主題的消息。為了給應(yīng)用程序提供更大的靈活性,Pulsar提供了三種訂閱類型,它們可以共存在同一個(gè)主題上:

- 獨(dú)享(exclusive)訂閱——同時(shí)只能有一個(gè)消費(fèi)者。

- 共享(shared)訂閱——可以由多個(gè)消費(fèi)者訂閱,每個(gè)消費(fèi)者接收其中的一部分消息。

- 失效備援(failover)訂閱——允許多個(gè)消費(fèi)者連接到同一個(gè)主題上,但只有一個(gè)消費(fèi)者能夠接收消息。只有在當(dāng)前消費(fèi)者發(fā)生失效時(shí),其他消費(fèi)者才開始接收消息。

圖3展示了這三種類型的訂閱。Pulsar的訂閱機(jī)制解耦了消息的生產(chǎn)者和消費(fèi)者,在不增加復(fù)雜性和開發(fā)工作量的情況下為應(yīng)用程序提供了更大的彈性。

??如何進(jìn)行Apache Pulsar分析

圖3:不同類型的Pulsar訂閱

數(shù)據(jù)分區(qū)

寫入主題的數(shù)據(jù)可能只有幾個(gè)MB,也有可能是幾個(gè)TB。所以,在某些情況下主題的吞吐量很低,有時(shí)候又很高,完全取決于消費(fèi)者的數(shù)量。那么碰到有些主題吞吐量很高而有些又很低的情況該怎么處理?為了解決這個(gè)問題,Pulsar將一個(gè)主題的數(shù)據(jù)分布到多臺(tái)機(jī)器上,也就是所謂的分區(qū)。

在處理海量數(shù)據(jù)時(shí),為了保證高吞吐量,分區(qū)是一種很常見的手段。默認(rèn)情況下,Pulsar的主題是不進(jìn)行分區(qū)的,但通過命令行工具或API可以很容易地創(chuàng)建分區(qū)主題,并指定分區(qū)的數(shù)量。

在創(chuàng)建好分區(qū)主題之后,Pulsar可以自動(dòng)對(duì)數(shù)據(jù)進(jìn)行分區(qū),不會(huì)影響到生產(chǎn)者和消費(fèi)者。也就是說,一個(gè)應(yīng)用程序向一個(gè)主題寫入數(shù)據(jù),對(duì)主題分區(qū)之后,不需要修改應(yīng)用程序的代碼。分區(qū)只是一個(gè)運(yùn)維操作,應(yīng)用程序不需要關(guān)心分區(qū)是如何進(jìn)行的。

主題的分區(qū)操作由一個(gè)叫作broker的進(jìn)程來處理,Pulsar集群里的每個(gè)節(jié)點(diǎn)都會(huì)運(yùn)行自己的broker。

如何進(jìn)行Apache Pulsar分析

圖4:將一個(gè)主題分到多個(gè)broker上

主題分區(qū)不會(huì)影響到應(yīng)用程序,除此之外,Pulsar還提供了幾種消息路由策略,幫助我們更好地跨分區(qū)、跨消費(fèi)者分布數(shù)據(jù)。

- 單個(gè)分區(qū)——生產(chǎn)者隨機(jī)挑選一個(gè)分區(qū),并將數(shù)據(jù)寫入該分區(qū)。該策略與非分區(qū)主題提供的保證是一樣的,不過如果有多個(gè)生產(chǎn)者向同一個(gè)主題寫入數(shù)據(jù),該策略就會(huì)很有用。

- 輪詢(round robin)分區(qū)——生產(chǎn)者通過輪詢的方式將數(shù)據(jù)平均地分布到各個(gè)分區(qū)上。比如,第一個(gè)消息寫入第一個(gè)分區(qū),第二個(gè)消息寫入第二個(gè)分區(qū),并以此類推。

- 哈希(hash)分區(qū)——每個(gè)消息會(huì)帶上一個(gè)鍵,要寫入哪個(gè)分區(qū)取決于它所帶的鍵。這種分區(qū)方式可以保證次序。

- 自定義分區(qū)——生產(chǎn)者使用自定義函數(shù)生成分區(qū)對(duì)應(yīng)的數(shù)值,然后根據(jù)這個(gè)數(shù)值將消息寫入對(duì)應(yīng)的分區(qū)。

持久性

Pulsar broker在收到消息并進(jìn)行確認(rèn)之后,就必須確保消息在任何情況下都不會(huì)丟失。與其他消息系統(tǒng)不同的是,Pulsar使用Apache BookKeeper來保證持久性。BookKeeper提供了低延遲的持久化存儲(chǔ)。Pulsar在收到消息之后,將消息發(fā)送給多個(gè)BookKeeper節(jié)點(diǎn)(具體由復(fù)制系數(shù)來定),節(jié)點(diǎn)將數(shù)據(jù)寫入預(yù)寫式日志(write ahead log),同時(shí)在內(nèi)存里也保存一份。節(jié)點(diǎn)在對(duì)消息進(jìn)行確認(rèn)之前,強(qiáng)制將日志寫入到持久化的存儲(chǔ)上,因此即使出現(xiàn)電力故障,數(shù)據(jù)也不會(huì)丟失。因?yàn)镻ulsar broker將數(shù)據(jù)發(fā)給了多個(gè)節(jié)點(diǎn),所以只會(huì)在大多數(shù)節(jié)點(diǎn)(quorum)確認(rèn)寫入成功之后它才會(huì)將確認(rèn)消息發(fā)給生產(chǎn)者。Pulsar就是通過這種方式來保證即使在出現(xiàn)了硬件故障、網(wǎng)絡(luò)故障或其他故障的情況下仍然能夠保證數(shù)據(jù)不丟失。在后續(xù)的文章中,我們將深入探討這方面的細(xì)節(jié)。

生產(chǎn)環(huán)境實(shí)踐

Pulsar目前在助力Yahoo的主要應(yīng)用,如Yahoo Mail、Yahoo Finance、Yahoo Sports、Gemini廣告平臺(tái)和Yahoo分布式鍵值存儲(chǔ)系統(tǒng)Sherpa。很多場(chǎng)景都要求很強(qiáng)的持久性保證,比如零數(shù)據(jù)丟失,同時(shí)又要求很高的性能。Pulsar從2015年開始部署到生產(chǎn)環(huán)境,現(xiàn)在在Yahoo的生產(chǎn)環(huán)境里大規(guī)模地運(yùn)行。

- Pulsar被部署在10多個(gè)數(shù)據(jù)中心里,具備了全網(wǎng)格復(fù)制能力

- 每天處理超過1000億個(gè)消息

- 支持著140萬個(gè)主題

- 整體的消息發(fā)布延遲小于5毫秒

在這篇文章里,我們簡(jiǎn)單介紹了Apache Pulsar的一些概念,并解釋了Pulsar是如何通過在發(fā)送確認(rèn)消息前提交數(shù)據(jù)來保證持久性的,以及通過分區(qū)來提高吞吐量,等等。我們將深入探討Pulsar的整體架構(gòu)和特性細(xì)節(jié),我們也將提供一些指南教大家如何更好地使用Pulsar。

關(guān)于如何進(jìn)行Apache Pulsar分析問題的解答就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注億速云行業(yè)資訊頻道了解更多相關(guān)知識(shí)。

向AI問一下細(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