閱讀945 返回首頁    go 阿裏雲 go 技術社區[雲棲]


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。





















最後更新:2017-04-03 05:39:41

  上一篇:go 迭代器 iterator
  下一篇:go linux c 文件 read(讀) 和 write (寫) 代碼分析