Storm中的可靠性

2021-09-02 13:44:11 字數 1832 閱讀 8147

storm中的可靠性

storm的ispout介面定義了三個與可靠性有關的方法:nexttuple,ack和fail。

public inte***ce ispout extends serializable

我們知道,當storm的spout發射乙個tuple後,他便會呼叫nexttuple()方法,在這個過程中,保證可靠性處理的第一步就是為發射出的tuple分配乙個唯一的id,並把這個id傳給emit()方法:

collector.emit( new values("value1" , "value2") , msgid );

為tuple分配乙個唯一id的目的就是為了告訴storm,spout希望這個tuple產生的tuple tree在處理完成或失敗後告知它,如果tuple被處理成功,spout的ack()方法就會被呼叫,相反如果處理失敗,spout的fail()方法就會被呼叫,tuple的id也都會傳入這兩個方法中。

需要注意的是,雖然spout有可靠性機制,但這個機制是否啟用由我們控制的。ibasicbolt在emit乙個tuple後自動呼叫ack()方法,用來實現比較簡單的計算。如果是irichbolt的話,如果想要實現anchor,必須自己呼叫ack方法。

storm的可靠性是由spout和bolt共同決定的,storm利用了anchor機制來保證處理的可靠性。如果spout發射的乙個tuple被完全處理,那麼spout的ack方法即會被呼叫,如果失敗,則其fail方法便會被呼叫。在bolt中,通過在emit(oldtuple,newtuple)的方式來anchor乙個tuple,如果處理成功,則需要呼叫bolt的ack方法,如果失敗,則呼叫其fail方法。乙個tuple及其子tuple共同構成了乙個tupletree,當這個tree中所有tuple在指定時間內都完成時spout的ack才會被呼叫,但是當tree中任何乙個tuple失敗時,spout的fail方法則會被呼叫。

ibasicbolt類會自動呼叫ack/fail方法,而irichbolt則需要我們手動呼叫ack/fail方法。我們可以通過topology_message_timeout_secs引數來指定乙個tuple的處理完成時間,若這個時間未被處理完成,則spout也會呼叫fail方法。

乙個實現可靠性的spout:

public class reliablesentencespout extends baserichspout ;

private int index = 0;

public void declareoutputfields(outputfieldsdeclarer declarer)

public void open( map config, topologycontext context, spoutoutputcollector collector)

public void nexttuple()

}public void ack(object msgid)

public void fail(object msgid)

}

例子2:

乙個實現可靠性的bolt:

public class reliablesplitsentencebolt extends baserichbolt

public void execute(tuple tuple)

this. collector.ack(tuple);

}public void declareoutputfields(outputfieldsdeclarer declarer)

}

Storm的可靠性與ack機制

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

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

1 先看一下數學中的異或 異或xor是乙個數 算符。它應用於邏輯運算。異或符號為 異或也叫半加運算,其運算法則相當於不帶進製的二進位制加法 二進位制下用1表示真,0表示假,則異或的運算法則為 0異或0 0,1異或0 1,0異或1 1,1異或1 0 同為0,異為1 既然相同的物件xor操作,結果是0,...

可靠性測試學習 可靠性測試理解

最近測試可靠性,參考了業界的一些思維,有些想法和建議 先說說軟體可靠性的定義,根據我測試的體會和思考,我覺得軟體的可靠性就是軟體系統發生故障後自動恢復或者人工干預使其能恢復到正常狀態的能力 業界的測試有些把容錯測試和可靠性測試搞混淆,其實兩者不一樣,容錯測試是通過模擬一些可能發生的已知的異常操作而檢...