譯文|Apache Pulsar 如何保證消息不丟不重?

原作者為 Ivan Kelly赏参。經(jīng)作者許可,我們對博客進行翻譯并發(fā)布沿盅。

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

本文介紹 Apache Pulsar 可以實現(xiàn)的保證類型费彼,以及實現(xiàn)保證的方式滑臊。

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

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

《Apache Pulsar 中的 effectively-once》一文討論了 SPE(尤其是 Heron)如何實現(xiàn) effectively-once 保證膘融。但是,在上圖所示的字數(shù)統(tǒng)計應用程序中祭玉,消息系統(tǒng)和數(shù)據(jù)源(將數(shù)據(jù)推送到消息系統(tǒng)時)都可能發(fā)生故障氧映。

https://www.splunk.com/en_us/blog/it/effectively-once-semantics-in-apache-pulsar.html

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

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

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

沒有丟失或重復消息,并且消息順序相同悔醋。這就實現(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)(https://www.consul.io/)鹦聪。但是,這些系統(tǒng)一般使用鍵值( K-V)類型的接口蒂秘,并不適合存儲消息流泽本。而且,鍵值類型的接口會將數(shù)據(jù)存儲在集群的單一日志副本上姻僧。也就是說规丽,當為消息系統(tǒng)向外(橫向)擴展多個流時,這些接口的運行就會出現(xiàn)很嚴重的問題撇贺。因此赌莺,對用戶最友好的系統(tǒng)應該既能提供類似日志的接口,又能向外擴展多個流松嘶。

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

關于 BookKeeper 如何保證全序原子廣播的可擴展性尽超,可以參考文章:
https://www.splunk.com/en_us/blog/it/scaling-out-total-order-atomic-broadcast-with-apache-bookkeeper.html

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

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

更多詳細信息蛀缝,可以參考文章《Apache Pulsar 中的 effectively-once》顷链。
https://www.splunk.com/en_us/blog/it/effectively-once-semantics-in-apache-pulsar.html

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市屈梁,隨后出現(xiàn)的幾起案子嗤练,更是在濱河造成了極大的恐慌,老刑警劉巖在讶,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件煞抬,死亡現(xiàn)場離奇詭異,居然都是意外死亡构哺,警方通過查閱死者的電腦和手機革答,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進店門战坤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人残拐,你說我怎么就攤上這事途茫。” “怎么了溪食?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵囊卜,是天一觀的道長。 經(jīng)常有香客問我错沃,道長栅组,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任捎废,我火速辦了婚禮笑窜,結果婚禮上,老公的妹妹穿的比我還像新娘登疗。我一直安慰自己排截,他們只是感情好,可當我...
    茶點故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布辐益。 她就那樣靜靜地躺著断傲,像睡著了一般。 火紅的嫁衣襯著肌膚如雪智政。 梳的紋絲不亂的頭發(fā)上认罩,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天,我揣著相機與錄音续捂,去河邊找鬼垦垂。 笑死,一個胖子當著我的面吹牛牙瓢,可吹牛的內(nèi)容都是我干的劫拗。 我是一名探鬼主播,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼矾克,長吁一口氣:“原來是場噩夢啊……” “哼页慷!你這毒婦竟也來了?” 一聲冷哼從身側響起胁附,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤酒繁,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后控妻,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體州袒,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年饼暑,在試婚紗的時候發(fā)現(xiàn)自己被綠了稳析。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片洗做。...
    茶點故事閱讀 40,040評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡弓叛,死狀恐怖彰居,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情撰筷,我是刑警寧澤陈惰,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站毕籽,受9級特大地震影響抬闯,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜关筒,卻給世界環(huán)境...
    茶點故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一溶握、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧蒸播,春花似錦睡榆、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至包雀,卻和暖如春宿崭,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背才写。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工葡兑, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人赞草。 一個月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓讹堤,卻偏偏與公主長得像,于是被迫代替她去往敵國和親房资。 傳聞我的和親對象是個殘疾皇子蜕劝,可洞房花燭夜當晚...
    茶點故事閱讀 44,979評論 2 355