Storm流计算的Component组件

来源:互联网 发布:电子板报设计软件 编辑:程序博客网 时间:2024/04/27 16:54

Storm架构中各角色之间的关系

Storm流计算的Component组件

Component组件

Storm流计算的Component组件

绿色是最常用的,红色是与事务相关的

Spout

Storm流计算的Component组件

Spout的最顶层抽象是ISpout接口

Open()是初始化方法

nextTuple()循环发射数据

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

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

activate和deactivate :spout可以被暂时激活和关闭

close方法在该spout关闭前执行,

但是并不能得到保证其一定被执行,kill -9时不执行,

Storm kill {topoName} 时执行。

通常情况下实现一个Spout,可以直接实现接口IRichSpout,如果不想写多余的代码,可以直接继承BaseRichSpout。

Bolt

Storm流计算的Component组件

IBolt定义了三个方法:

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。

实现一个Bolt,可以实现IRichBolt接口或继承BaseRichBolt,如果不想自己处理结果反馈,可以实现 IBasicBolt接口或继承BaseBasicBolt,它实际上相当于自动做了prepare方法和 collector.emit.ack(inputTuple)。

0 0
原创粉丝点击