溫馨提示×

溫馨提示×

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

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

Apache Pulsar是如何保證消息不丟不重

發(fā)布時間:2021-12-22 14:50:29 來源:億速云 閱讀:308 作者:柒染 欄目:大數(shù)據(jù)

今天就跟大家聊聊有關(guān)Apache Pulsar是如何保證消息不丟不重,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。

人們在探討流處理引擎(stream processing engine, SPE)時,經(jīng)常會提到 effectively-once(或 exactly-once)保證。一般情況下,較大的數(shù)據(jù)管道包含多個組件,而管道中的任何組件都有可能發(fā)生故障,SPE 通常只是其中一個小組件。如果用戶希望數(shù)據(jù)管道提供 effectively-once 保證,則管道中的其他(非 SPE)組件需要提供相應(yīng)的保證。

下面介紹 Apache Pulsar 可以實現(xiàn)的保證類型,以及實現(xiàn)保證的方式。

下圖為字數(shù)統(tǒng)計應(yīng)用程序示例:

Apache Pulsar是如何保證消息不丟不重

如上圖所示,首先來自數(shù)據(jù)源(如 Twitter Firehose)的數(shù)據(jù)被推送到消息系統(tǒng),然后消息系統(tǒng)將這些數(shù)據(jù)傳輸?shù)?SPE 并由 SPE 處理這些數(shù)據(jù)(即字數(shù)統(tǒng)計)。最后,將數(shù)據(jù)處理結(jié)果存儲在字數(shù)統(tǒng)計數(shù)據(jù)庫中,也可以進一步用作分析。

要想確保數(shù)據(jù)管道內(nèi)實現(xiàn) effectively-once 保證,需要為消息系統(tǒng)和數(shù)據(jù)源提供 effectively-once 保證。字數(shù)統(tǒng)計數(shù)據(jù)庫也可能會發(fā)生故障,從而使問題變得更加復(fù)雜。但是,該數(shù)據(jù)庫只用于存儲字數(shù)統(tǒng)計節(jié)點的數(shù)據(jù)副本。因此,即使數(shù)據(jù)庫發(fā)生故障,用戶也可以很容易地恢復(fù)數(shù)據(jù)庫。

當消息系統(tǒng)或 SPE 中發(fā)生故障后,為了提供 effectively-once 保證,需要指定故障發(fā)生前的一個數(shù)據(jù)時間點,SPE 可以重新連接到這一時間點的消息系統(tǒng)讀取數(shù)據(jù)。重新連接時,SPE 需要接收發(fā)生故障前收到的所有信息。不應(yīng)該發(fā)生消息丟失消息重復(fù)故障。對于絕大多數(shù)用戶來說,消息順序也應(yīng)該相同。

盡管“順序相同”這一要求本身并非正確性要求,但可以考慮一下消息順序不同的情況。為了確保不重復(fù)消息,消息接收方(即 SPE)必須追蹤所有已接收處理的消息。追蹤時間越長,存儲需求越大。因此 SPE 不適用于長時間運行的系統(tǒng)。所以,消息順序相同雖然不是一項必須的要求,但的確可以為系統(tǒng)運行帶來便利。

沒有丟失或重復(fù)消息,并且消息順序相同。這就實現(xiàn)了全序原子廣播(TOAB),也就是分布式系統(tǒng)中常提到的共識。
https://en.wikipedia.org/wiki/Consensus_(computer_science)

消息系統(tǒng)想要實現(xiàn) effectively-once 保證,就必須實現(xiàn)共識或者借助其他外在系統(tǒng)幫助其實現(xiàn)共識。

開源社區(qū)提供許多實現(xiàn)共識的常見系統(tǒng)。但是,這些系統(tǒng)一般使用鍵值( K-V)類型的接口,并不適合存儲消息流。而且,鍵值類型的接口會將數(shù)據(jù)存儲在集群的單一日志副本上。也就是說,當為消息系統(tǒng)向外(橫向)擴展多個流時,這些接口的運行就會出現(xiàn)很嚴重的問題。因此,對用戶最友好的系統(tǒng)應(yīng)該既能提供類似日志的接口,又能向外擴展多個流。

只有極少數(shù)系統(tǒng)可以同時提供上述兩種功能,而 Apache BookKeeper 便是其中之一。BookKeeper 可以實現(xiàn) ZooKeeper 要求的一致性,并對其進行水平擴展,因此可以存儲日志副本。

Apache Pulsar 使用 BookKeeper 存儲與每個 topic 關(guān)聯(lián)的消息流,因此可以實現(xiàn) effectively-once 保證。BookKeeper 可以為 Pulsar 提供全序原子廣播保證,因此客戶端可以重連過去任一時間點。Pulsar 通過游標實現(xiàn)這一連接。

Pulsar 利用發(fā)布消息的應(yīng)用程序?qū)?shù)據(jù)推送給消息系統(tǒng),因此需要實現(xiàn)數(shù)據(jù)的 effiectively-once 保證。Pulsar 通過消息去重機制實現(xiàn)了消息 effiectively-once 保證。

看完上述內(nèi)容,你們對Apache Pulsar是如何保證消息不丟不重有進一步的了解嗎?如果還想了解更多知識或者相關(guān)內(nèi)容,請關(guān)注億速云行業(yè)資訊頻道,感謝大家的支持。

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI