阅读471 返回首页    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的恢复方法