Apache Storm是一個免費開源的分布式實時計算系統。Storm能夠輕松可靠地處理無界的資料流,就像Hadoop對資料進行批處理。Storm主要使用Clojure與Java語言編寫,最初是由Nathan Marz帶領BackType公司的團隊建立,在Backtype公司被Twitter公司收購後開源。2013年9月,Apache基金會開始接管并孵化Storm項目。
Storm能用到很多場景中,包括:實時分析、線上機器學習、連續計算、分布式RPC、ETL等。
Storm中的基本概念如下:
Topology
一個Topology就是一個計算節點所組成的圖。Topology裡面的每個處理節點都包含處理邏輯, 而節點之間的連接配接則表示資料流動的方向。
Stream
Stream是Storm裡面的關鍵抽象。一個Stream是一個無界的Tuple序列。Tuple可以包含整形、長整型、短整型、位元組、字元、雙精度數、浮點數、布爾值和位元組數組。使用者可以定義位元組的序列化器以在Tuple中使用自定義類型。
Tips:
Storm使用Tuple來作為它的資料模型。每個Tuple是一堆值,每個值有一個名字,并且每個值可以是任何類型。一個沒有邊界的、源源不斷的、連續的Tuple序列就組成了Stream。
Spout
Spout是Topology流的來源。通常Spout會從外部資料源(隊列、資料庫等)讀取資料,然後封裝成Tuple形式,之後發送到Stream中。Spout負責從資料源拉取資料,相當于整個系統的生産者。
Bolt
Bolt負責消費資料并将tuple發送給下一個計算單元。Bolt處理輸入的Stream,并産生新的輸出Stream。Bolt可以執行過濾、函數操作、Join、操作資料庫等任何操作。
Tips:
Spout 發射資料; Bolt 處理資料。可以實作Spout和Bolt對應的接口以處理你的應用的邏輯。Spout和Bolt所組成的網絡會被打包成Topology, 可以把Topology送出給Storm的叢集來運作。
Stream Grouping
Stream Grouping用于在Bolt的任務中定義流應該如何分組。Storm總的流分組有8種:Shuffle grouping、Fields grouping、Partial Key grouping、All grouping、Global grouping、None grouping、Direct grouping、Local or shuffle grouping。
Task
每個Spout或者Bolt在叢集執行許多任務。每個任務對應一個線程的執行,流分組定義如何從一個任務集到另一個任務集發送Tuple。可通過TopologyBuilder類的setSpout()和setBolt方法來設定每個Spout或者Bolt的并行度。
Worker
Topology跨一個或多個Worker節點的程序執行。每個Worker節點的程序是一個實體的JVM和Topology執行所有任務的一個子集。