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();




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值