Storm之Bolt-接口
IBolt:
bolt接口類,定義了常用的幾個接口,IBolt的實現類在client上被創建,然後序列化到拓撲裏並被提交到集群的master上,之後nimbus會啟動worker進行反序列化,調用prepare進行準備完畢之後就開始處理tuples
如果是在java裏定義bolts ,建議實現IRichBolt.java接口類,IRichBolt.java同時繼承了IComponent.java接口,提供了更多對拓撲進行操作的方法。
/**
* 當集群中的worker初始化一個跟當前Bolt相關的task時候被調用,此方法提供和準備bolt執行時的環境.
* @param stormConf 此bolt使用的storm配置,合並了本機和集群的配置,將會提供給topology
* @param context task的上下文,可以獲取taskId,componentId,input,output等
* @param collector 用於任意時刻提交bolt裏的tuples,collector是線程安全的,應當保存在Bolt裏.
*/
void prepare(Map stormConf, TopologyContext context, OutputCollector collector);
/**
* 處理單個輸入的tuple
* 這裏麵使用OutputCollector來提交tuples.
* 官方建議所有的輸入tuples在處理完之後進行ack或者fail,否則storm無法判斷該tuples是否被處理完畢
* 一般使用IBasicBolt,在execute方法中額外提供了outputCollector,會更加方便處理
* @param input
*/
void execute(Tuple input);
/**
* Bolt關閉的時候被調用,由於是被supervisor使用kill 9幹掉的,所以並不保證cleanup會被執行
*/
void cleanup();
IComponent.java
組件接口,所有的bolt和spout都可以視作組件
/**
* 申明了當前組件的輸出模式
* @param declarer 申明輸出streamId,輸出的field,判斷一個output stream是否是direct stream
*/
void declareOutputFields(OutputFieldsDeclarer declarer);
/**
*獲取組件配置.
* @return
*/
Map<String, Object> getComponentConfiguration();
IRichBolt.java
跟IBolt接口相似,隻是多繼承了IComponent,多了申明輸出和獲取配置兩個接口
IBasicBolt.java
/**
* 跟IBolt.java中作用類似,隻是少了OutPutCollector
*/
void prepare(Map stormConf, TopologyContext context);
/**
* 跟Ibolt.java中作用類似,多了OutPutCollector
*/
void execute(Tuple input, BasicOutputCollector collector);
void cleanup();
最後更新:2017-04-01 13:38:49