Storm流计算的Component组件

本文详细介绍了Storm架构中的核心组件Spout和Bolt的功能及其实现方式。包括Spout的发射、反馈机制,Bolt的处理流程及其接口使用说明。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值