2.storm原理和概念詳述

Storm集羣結構
     
1.Nimbus 和Supervisors 之間所有的協調工作是通過 一個Zookeeper 集羣。
2.Nimbus進程和 Supervisors 進程是無法直接連接和無狀態的;  所有的狀態維持在Zookeeper中或保存在本地磁盤上。
這意味着你可以 kill -9 Nimbus 或Supervisors 進程,而不需要做備份。這種設計導致storm集羣具有令人難以置信的穩定性,即無耦合。

Storm工作原理
Nimbus 負責在集羣分發的代碼,topo只能在nimbus機器上提交,將任務分配給其他機器,和故障監測。
Supervisor,監聽分配給它的節點,根據Nimbus 的委派在必要時啓動和關閉工作進程。 每個工作進程執行topology 的一個子集。一個運行中的topology 由很多運行在很多機器上的工作進程組成。
在Storm中有對於流stream的抽象,流是一個不間斷的無界的連續tuple,注意Storm在建模事件流時,把流中的事件抽象爲tuple即元組

Storm認爲每個stream都有一個源,也就是原始元組的源頭,叫做Spout(管口)
處理stream內的tuple,抽象爲Bolt,bolt可以消費任意數量的輸入流,只要將流方向導向該bolt,同時它也可以發送新的流給其他bolt使用,這樣一來,只要打開特定的spout再將spout中流出的tuple導向特定的bolt,又bolt對導入的流做處理後再導向其他bolt或者目的地。
可以認爲spout就是水龍頭,並且每個水龍頭裏流出的水是不同的,我們想拿到哪種水就擰開哪個水龍頭,然後使用管道將水龍頭的水導向到一個水處理器(bolt),水處理器處理後再使用管道導向另一個處理器或者存入容器中。


爲了增大水處理效率,我們很自然就想到在同個水源處接上多個水龍頭並使用多個水處理器,這樣就可以提高效率。
這是一張有向無環圖,Storm將這個圖抽象爲Topology(拓撲),Topo就是storm的Job抽象概念,一個拓撲就是一個流轉換圖
圖中每個節點是一個spout或者bolt,每個spout或者bolt發送元組到下一級組件,廣播方式。而Spout到單個Bolt有6種grouping方式,後續細講。

Topology
Storm將流中元素抽象爲tuple,一個tuple就是一個值列表value list,list中的每個value都有一個name,並且該value可以是任意可序列化的類型。拓撲的每個節點都要說明它所發射出的元組的字段的name,其他節點只需要訂閱該name就可以接收處理。

概念
Streams:消息流
消息流是一個沒有邊界的tuple序列,而這些tuples會被以一種分佈式的方式並行創建和處理。 每個tuple可以包含多列,字段類型可以是: integer, long, short, byte, string, double, float, boolean和byte array。 你還可以自定義類型 — 只要你實現對應的序列化器。
Spouts:消息源
Spouts是topology消息生產者。Spout從一個外部源(消息隊列)讀取數據向topology發出tuple。 消息源Spouts可以是可靠的也可以是不可靠的。一個可靠的消息源可以重新發射一個處理失敗的tuple, 一個不可靠的消息源Spouts不會。
Spout類的方法nextTuple不斷髮射tuple到topology,storm在檢測到一個tuple被整個topology成功處理的時候調用ack, 否則調用fail。
storm只對可靠的spout調用ack和fail。
Bolts:消息處理者
消息處理邏輯被封裝在bolts裏面,Bolts可以做很多事情: 過濾, 聚合, 查詢數據庫等。
Bolts可以簡單的做消息流的傳遞。複雜的消息流處理往往需要很多步驟, 從而也就需要經過很多Bolts。第一級Bolt的輸出可以作爲下一級Bolt的輸入。而Spout不能有一級。
Bolts的主要方法是execute(死循環)連續處理傳入的tuple,成功處理完每一個tuple調用OutputCollector的ack方法,以通知storm這個tuple被處理完成了。當處理失敗時,可以調fail方法通知Spout端可以重新發送該tuple。
流程是: Bolts處理一個輸入tuple, 然後調用ack通知storm自己已經處理過這個tuple了。storm提供了一個IBasicBolt會自動調用ack。
Bolts使用OutputCollector來發射tuple到下一級Blot。



發佈了46 篇原創文章 · 獲贊 0 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章