Storm詳解一、Storm 概述
阿新 • • 發佈:2019-01-06
一、Storm概述
Storm是一個分散式的、可靠的、零失誤的流式資料處理系統。它的工作就是委派各種元件分別獨立的處理一些簡單任務。在Storm叢集中處理輸入流的是Spout元件,而Spout又把讀取的資料傳遞給叫Bolt的元件。Bolt元件會對收到的資料元組進行處理,也有可能傳遞給下一個Bolt。我們可以把Storm叢集想象成一個由bolt元件組成的鏈條集合,資料在這些鏈條上傳輸,而bolt作為鏈條上的節點來對資料進行處理。
Storm和Hadoop叢集表面看上去很類似,但是Hadoop上面執行的是MapReduceJobs,而在Storm上執行的是拓撲topology,這兩者之間是非常不一樣的,關鍵區別是:MapReduce最終會結束,而一個topology永遠會執行(除非你手動kill掉),換句話說,Storm是面向實時資料分析,而Hadoop面向的是離線資料分析。
假設有這麼一種情形,當你看政論類節目的時候,他們會經常提到一些人名和一些熱門話題,如果我們把其中人名和話題的重複次數都記錄下來,結果應該是一件很有趣的事情。
因此,想象在Storm環境下,我們可以把辯論者說的話作為輸入流,spout元件來讀取這些資料,然後把每一句話傳送給bolt1元件,bolt1元件負責把這一句話拆分成一個個單詞,再把這些單詞傳送到bolt2元件,bolt2元件負責統計每個單詞的數量然後把這些資訊儲存到資料庫中。辯論者在不斷的說話,而storm不斷的實時重新整理資料庫中結果,當你想檢視這些結果時,你只需查詢資料庫即可。
現在,你可以想象如果可以把這些spout和bolt均衡分佈到整個叢集中,並且可以方便地做無限制的擴充套件,厲害吧?這就是Storm的威力!
圖1.1:一個簡單的Topology
Storm的一些典型應用場景 1.資料流處理:與其它流處理系統不同,storm不需要中間佇列媒介 2.實時計算:可連續不斷的進行實時資料處理,把處理的結果實時更新展示到客戶端 3.分散式遠端過程呼叫:可充分利用叢集中CPU資源,進行CPU密集型計算。 二、Storm元件 叢集中有兩種型別的節點:主節點和工作節點
Storm叢集中的狀態都儲存在zookeeper或本地磁碟中,因此Storm中的程序都是無狀態的,任何一個節點失敗或重啟都不會影響整個叢集。Storm底層使用zeromq來保證其非凡的特性:
Storm的一些典型應用場景 1.資料流處理:與其它流處理系統不同,storm不需要中間佇列媒介 2.實時計算:可連續不斷的進行實時資料處理,把處理的結果實時更新展示到客戶端 3.分散式遠端過程呼叫:可充分利用叢集中CPU資源,進行CPU密集型計算。 二、Storm元件 叢集中有兩種型別的節點:主節點和工作節點
-
- master節點:執行Nimbus程序,負責分發程式碼,安排任務,監控執行狀態(主要是節點成功失敗狀態)。
- worker節點:執行Supervisor程序,負責執行一個Topology的一個子集
Storm叢集中的狀態都儲存在zookeeper或本地磁碟中,因此Storm中的程序都是無狀態的,任何一個節點失敗或重啟都不會影響整個叢集。Storm底層使用zeromq來保證其非凡的特性:
- 併發的socket 類
- 比TCP更快,適用於叢集環境和超級計算
- 通過inproc、IPC、TCP和多路廣播傳輸訊息
- 非同步IO
- Connect N-to-N via fanout,pubsub,pipeline,requst-reply
- 使用push/pull模式
- 程式設計簡單:主要依賴於spout和bolt來實現
- 支援多種程式語言:基於JVM的語言都可以支援,任何一個其它語言只要實現了一箇中間類也可支援
- 容錯性高:執行宕機、重啟等
- 可拓展:可以任意增刪節點到叢集
- 可靠性高:所有訊息都被保證至少消費一次,也就是說,Storm中訊息不會丟失
- 快速:快就不必多少了
- 事務支援