storm程式設計模型
Topologies
Streams
Spouts
Bolts
Storm核心元件
Stream groupings
Reliability
Tasks
Workers
具體介紹如下:
topology 是storm中運作的一個實時應用程式的名稱(拓撲),因為各個元件間的消息流動而形成邏輯上的拓撲結構。
stream 表示資料的流向,流式Storm的核心抽象。一個流是一個無界Tuple序列,Tuple可以包含整性、長整型、短整型、位元組、字元、雙精度數、浮點數、布爾值和位元組數組。使用者可以通過定義序列化器,在本機Tuple使用自定義類型;
spout 在一個topology中擷取源資料流的元件,通常情況下spout會從外部資料源讀取資料,然後轉換為topology内部的源資料;
bolt 接收資料,然後執行處理的元件,使用者可以其中執行自己想要的操作(Bolt可以完成過濾、業務處理、連接配接運算、連接配接通路資料庫等業務);
stream grouping(流分組) 流分組是拓撲定義的一部分,為每個Bolt指定應該接收哪個流作為輸入。在bolt的任務中定義流應該如何分區,Storm有7個内置的流分組接口(随機分組(Shuffle grouping)、字段分組(Fields grouping)、全部分組(All grouping)、全局分組(Global grouping)、無分組(None grouping)、直接分組(Direct grouping)、本地或随機分組(Local or shuffle grouping))
Worker(工作程序)是Spout/Bolt中運作具體處理邏輯的程序。Topology跨一個或多個Worker節點的程序執行,每個Worker節點的程序是一個實體的JVM和Topology執行所有任務的子集。
Task(任務) Worker中每一個Spout/Bolt的線程稱為一個任務。每個spout或bolt在叢集執行許多任務,每個任務對應一個線程的執行,流分組定義如何從一個任務集到另一個任務集發送Tuple。可通過TopologyBuilder類的setSoupt()和setBolt()方法來設定每個spout或bolt的并行度(parallelism)。
總結如下:
Topologies:
拓撲結構對象
storm是以topologies為機關,來運作作業
Spouts:
資料的産生源頭
Bolts:
處理資料的邏輯
tuples:傳輸資料,此資料是封裝到tuples對象實作

分析storm程式設計核心的api
配置pom檔案
ISpout接口
ISpout是實作Spout的核心接口, Spout負責将資料送到topology中處理, Storm 會跟蹤Spout發出的tuple的DAG:
當Storm發現tuple的DAG成功的執行處理, 會發送一個ack message給spout,
當執行失敗, 會發送以fail message 給spout;
ISpout接口特點
1.Spout每次釋放tuple, 都會用一個id标記該tuple, 這個id可以是任何類型, 當storm ack 或fail一個message, 就會通過id來追溯到和那個Spout相關聯,如果spout省略了id,或設定一個null, 那麼storm就不追溯到這個tuple資訊, 那就無法回報ack或fail資訊,spout也無法收到資訊。
2.Storm在相同的線程中執行ack , fail , nextTuple,這意味着ISpout的實作者不用考慮這些方法的并發性問題, 但是,同時要保證nextTuple方法不能阻塞,否側導緻ack, fail被阻塞,等待執行,然而fail的timeout決定不能被阻塞。
ISpout方法
//當Spout元件初始化時,觸發調用此方法
//SpoutOutputCollector:用于發送資料到下遊元件
void open(Map conf, TopologyContext context, SpoutOutputCollector collector);
//産生資料,并且發送資料到下遊元件
void nextTuple();
//資料發送成功,則回調此方法
void ack(Object msgId);
//資料發送失敗,則回調此方法
void fail(Object msgId);
IBolt接口
職責:接收tuple處理,并進行相應的處理(filter/join/....) hold住tuple再處理IBolt會在一個運作的機器上建立,使用Java序列化它,然後送出到主節點(nimbus)上去執行nimbus會啟動worker來反序列化,調用prepare方法,然後才開始處理tuple處理
prepare:初始化
execute:處理一個tuple,tuple對象中包含了中繼資料資訊
cleanup:shutdown之前的資源清理操作
//當bolt元件初始化時,觸發此方法
void prepare(Map stormConf, TopologyContext context, OutputCollector collector);
//此方法接受上遊資料,并且處理資料
void execute(Tuple input);
void cleanup();