xor演算法在storm可靠性中的應用

2021-06-22 23:34:48 字數 782 閱讀 6335

1、先看一下數學中的異或

異或xor是乙個數**算符。它應用於邏輯運算。異或符號為「^」。

異或也叫半加運算,其運算法則相當於不帶進製的二進位制加法:二進位制下用1表示真,0表示假,則異或的運算法則為:0異或0=0,1異或0=1,0異或1=1,1異或1=0(同為0,異為1),

既然相同的物件xor操作,結果是0,那麼有這樣乙個公式,

a xor b…xor b xor a = 0,其中每乙個運算元出現且僅出現兩次。

2、storm可靠性的機制

storm中有乙個系統級別的元件是acker,acker追蹤從spout發射出的流id(msgid)在每乙個task中生成的tuple是否完成。spout或者bolt在處理完tuple後,都會告訴acker我已經處理完了該源tuple(如tupleid=1),如果emit乙個tuple的話,同時會告訴acker我發**乙個tuple(如tupleid=2),如果在大量的高併發的訊息的情況下,傳統的在記憶體中跟蹤執**況的方式,記憶體的開銷會非常大,甚至記憶體溢位。acker巧妙的利用了xor的機制,只需要維護乙個msgid的標記位即可,處理方法是acker在初始的時候,對每個msgid初始化乙個校驗值ack-val(為0),在處理完tuple和emit tuple的時候,會先對這兩個個值做xor操作,生成的中間值再和acker中的當前校驗值ack-val做xor生成新的ack-val值,當所有的tuple都處理完成都得到確認,那麼最後的ack-val自然就為0了(因為每乙個tuple,從emit到ack都是經過兩次xor操作,所以最後的結果為0可以由上面的那個公式可以驗證出來)

Storm中的可靠性

storm中的可靠性 storm的ispout介面定義了三個與可靠性有關的方法 nexttuple,ack和fail。public inte ce ispout extends serializable 我們知道,當storm的spout發射乙個tuple後,他便會呼叫nexttuple 方法,在這...

Storm的可靠性與ack機制

無論是實時處理還是離線處理,都會遇到乙個不可避免的問題是,失敗任務如何重做?storm提供了乙個ack機制。首先來看一下ispout介面的方法。public inte ce ispout extends serializable可以看到,提供了兩個方法ack 和fail 裡面的引數是乙個叫msgid...

storm初級教程 007 訊息可靠性如何防oom

spout fail重發的明確定義是 目標spout呼叫fail或者超過失敗超時時間 而ack則是被所有的bolt處理完畢呼叫 詳解ack 不完善導致的oom異常 每乙個tuple成為可靠性訊息的時候都會建立訊息樹,訊息樹在spout中的建立是msgid this.collector.emit ne...