storm api

storm每个组件都是component组件的子类

其中用的最多的是iRichSpout iBasicBolt iRichBolt BaseComponent

BaseComponent是storm提供的”偷懒“的类,它及其子类都或多或少实现了其接口定义的部分方法。这样我们用的时候,而不是自己每次都写所有方法

spout的最顶层抽象是iSpout接口

====

open()是初始化方法

nextTuple()循环发射数据

ack()成功处理tuple回调方法

fail()处理失败tuple回调方法

active和deactive:spout可以被暂时激活和关闭

close方法在该spout关闭前执行,但是并不能得到保证其一定被执行,kill -9时不执行,Storm kill {topoName}时执行

====

所以关闭的时候一般不会用kill -9

但是我们在关闭nimbus和supervisor的时候我们一般都是用kill -9的方式,因为只有这种方式


ibolt是bolt最高级的封装,定义了三个方法

prepare方法进行初始化,传入当前执行的上下文

execute接受一个tuple进行处理,也可emit数据到下一级组件

cleanup 同ispout的close方法,不保证一定执行,我们正常退出的时候执行


ibolt继承了Serializable,我们在nimbus上提交了topology以后,创建出来的bolt会序列化后发送到具体执行的worker(工作进程)上去。worker在执行该bolt时,会先调用prepare方法传入当前执行的上下文。

execute接受一个tuple进行处理,并用prepare方法传入的outputcollector的ack方法(表示成功)或fail(表示失败)来反馈处理结果

还可以通过outputcollector的emit方法吧结果发射到下一级组件


IBasicBolt接口,实现该接口的Bolt不用在代码中提供反馈结果,storm内部会自动反馈成功,如果你确定要反馈失败,可以抛出FailedException

当然trident均不用显性调用ack和fall,框架会自动调


实现一个bolt,可以实现irichbolt接口或继承bashrichBolt,如果不想自己处理结果反馈,可以实现ibasicbolt接口或继承basebasicbolt,它实际上相当于自动做了prepare方法和collect.emit.ack(inputTuple)


一个简单的使用见:https://github.com/zengxiaosen/stormlearning01.git



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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值