Strom(三)-Strom的特性

1、storm的可靠性服務器

storm保證從spout發出的每一個tuple都會被徹底處理 便可靠性spa

Acker工做流程線程

1 Spout 建立一個新的Tuple時候,會發射一個消息通知acker去跟蹤;code

    collector.emit( new Values("value1" , "value2") , msgId );orm

2 Bolt 在處理Tuple成功或者失敗,也會發送一個消息通知Acker隊列

     collector.emit( tuple, new Values( word));進程

 3 Acker會找到發射該TupleSpout,回調其Ack fail方法unicode

發射tuple的時候spout會提供一個message-id, 後面咱們經過這個message-id來追蹤這個tuple。開發

IBasicBolt類會自動調用ack/fail方法,而IRichBolt則須要咱們手動調用ack/fail方法。消息隊列

三種方法能夠去掉可靠性

第一是把Config.TOPOLOGY_ACKERS 設置成 0. 在這種狀況下,storm會在spout發射一個tuple以後立刻調用spoutack方法。也就是說這個tuple樹不會被跟蹤。

第二個方法是在tuple層面去掉可靠性。 你能夠在發射tuple的時候不指定messageid來達到不跟糉某個特定的spout tuple的目的。

最後一個方法是若是你對於一個tuple樹裏面的某一部分到底成不成功不是很關心,那麼能夠在發射這些tuple的時候unanchor它們。 這樣這些tuple就不在tuple樹裏面, 也就不會被跟蹤了。

6. 快速的消息處理

用ZeroMQ做爲底層消息隊列, 保證消息能快速被處理

支持水平擴展

在Storm集羣中真正運行topology的主要有三個實體:工做進程、線程和任務。Storm集羣中的每臺機器上均可以運行多個工做進程,每一個工做進程又可建立多個線程,每一個線程能夠執行多個任務,任務是真正進行數據處理的實體,咱們開發的spout、bolt就是做爲一個或者多個任務的方式執行的。

所以,計算任務在多個線程、進程和服務器之間並行進行,支持靈活的水平擴展。

4. 容錯性強

若是在消息處理過程當中出了一些異常,Storm會從新安排這個出問題的處理單元。Storm保證一個處理單元永遠運行(除非你顯式殺掉這個處理單元)。

5. 可靠的消息保證

Storm能夠保證spout發出的每條消息都能被「徹底處理」,這也是直接區別於其餘實時系統的地方,

相關文章
相關標籤/搜索