1. 程式人生 > >Storm詳解一、Storm 概述

Storm詳解一、Storm 概述

一、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元件 叢集中有兩種型別的節點:主節點和工作節點
    1. master節點:執行Nimbus程序,負責分發程式碼,安排任務,監控執行狀態(主要是節點成功失敗狀態)。
    2. worker節點:執行Supervisor程序,負責執行一個Topology的一個子集     
圖1.2:storm 叢集中的元件:
     Storm叢集中的狀態都儲存在zookeeper或本地磁碟中,因此Storm中的程序都是無狀態的,任何一個節點失敗或重啟都不會影響整個叢集。Storm底層使用zeromq來保證其非凡的特性:
  • 併發的socket 類
  • 比TCP更快,適用於叢集環境和超級計算
  • 通過inproc、IPC、TCP和多路廣播傳輸訊息
  • 非同步IO  
  • Connect N-to-N via fanout,pubsub,pipeline,requst-reply
  • 使用push/pull模式   
三、Storm特性
  • 程式設計簡單:主要依賴於spout和bolt來實現
  • 支援多種程式語言:基於JVM的語言都可以支援,任何一個其它語言只要實現了一箇中間類也可支援
  • 容錯性高:執行宕機、重啟等
  • 可拓展:可以任意增刪節點到叢集
  • 可靠性高:所有訊息都被保證至少消費一次,也就是說,Storm中訊息不會丟失
  • 快速:快就不必多少了
  • 事務支援
初步瞭解Storm之後,下一節會通過寫一個簡單的Demo執行一下來讓大家真實體會一下Storm。