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


Storm之Bolt-接口

9789f05457838374ddb311497a7ab21a3390c0bb


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

  上一篇:go Windows 2008
  下一篇:go Greenplum failed segment的恢複方法