Storm的可靠性如何實現?包括spout和bolt兩部分

spout端:
    在圖中,實線部分表示從spout發射的原始主幹tuple,虛線部分表示的子tuple都是源自於原始tuple。這樣產生的圖形叫作tuple樹,在有保障數據的處理過程當中,bolt每收到一個tuple,都須要向上遊確認應答(ack)或報錯。對主幹tuple中的一個tuple,若是tuple樹上的每一個bolt進行了確認應答,spout會調用ack方法來標明這條信息已經徹底處理了。若是樹中的任何一個bolt處理tuple報錯,或者處理超時,spout會調用fail方法。
    Storm的ISpout接口定義了三個可靠性相關的API:nextTuple,ack和fail。
    前面講過,Storm經過調用Spout的nextTuple()發送一個tuple。爲實現可靠的消息處理,首先要給每一個發出的tuple帶上惟一的ID,而且將ID做爲參數傳遞SpoutOutputCollector的emit()方法:    collector.emit(new Values("value1", "value2"), msgId);
    給tuple指定ID告訴Storm系統,不管執行成功仍是失敗,spout都要接收tuple樹上全部節點返回的通知。若是處理成功,spout的ack()方法將會對編號是ID的消息應答確認,若是執行失敗或者超時,會調用fail()方法。
    Fail方法即重發失敗的tuple。orm


bolt可靠性:
    bolt要實現可靠的消息處理機制包含兩個步驟:
    1.當發射衍生的tuple時,須要錨定讀入的tuple。
    2.當處理消息成功或者失敗時分別確認應答或者報錯。
     
    錨定一個tuple的意思是,創建讀入tuple和衍生出的tuple之間的對應關係,這樣下游的bolt就能夠經過應答確認、報錯或超時來加入到tuple樹結構中。接口

    非錨定的tuple不會對數據流的可靠性起做用。若是一個非錨定的tuple在下游處理失敗,原始的根tuple不會從新發送。it

相關文章
相關標籤/搜索