组件

组件

概要

组件是指在Storm中用来发送、响应消息的对象,表现为Storm数据流图中的节点。在Storm项目的具体实现中,这些组件继承或者实现与IComponent、Spout、Bolt相关的接口或者类。

IComponent

IComponent接口主要定义了所有Topology各个组件可能使用的共同方法。具体定义如下。

public interface IComponent extends Serializable {
    //声明消息输出方式,联系Declarer
    void declareOutputFields(OutputFieldsDeclarer declarer);
    //声明(定义)并返回配置Config实例
    Map<String, Object> getComponentConfiguration();
}

BaseComponent是IComponent是一个虚类,定义如下。

public abstract class BaseComponent implements IComponent {
    @Override
    public Map<String, Object> getComponentConfiguration() {
        return null;
    }    
}

Spout

Spout即消息源,可以自发生成消息,也可以从外部接收信息,例如Kafka。Spout相关接口和类的关系图如下。

这里写图片描述
从上图不难看出,ISpout是核心接口,其函数所负责实现的功能如下。

  1. void open(Map conf, TopologyContext context, SpoutOutputCollector collector) 当一个ISpout任务启动的时候,使用该函数初始化运行环境
  2. void close() 当ISpout关闭时调用该函数,清理现场
  3. void activate() 状态切换函数,激活ISpout,调用该函数后,将会调用NextTuple()函数
  4. void deactivate() 状态切换函数,失活ISpout
  5. void nextTuple() 关键运行函数,调用该函数时向外发送消息
  6. void ack(Object msgId) 确认发送的msgId消息已经成功发送
  7. void fail(Object msgId) 确认所发送的msgId消息发送失败,可能进行再次发送

需要注意的是,nextTuple(),ack()和fail() 函数是运行在同一个线程中的,因此nextTuple()是非阻塞的,当没有消息发送时立即返回。

IRichSpout同时继承了ISpout和IComponent接口,BaseComponent是实现ICompont的虚类,BaseRichSpout实现IRichSpout、继承BaseComponent。IRichSpout和BaseRichSpout不同之处是IRichSpout用户可以自定义所有的函数,灵活性更高,BaseRichSpout则只需要实现部分函数,一些函数已经实现,使用起来更简单。

Bolt

Bolt即消息处理组件,接收来自上游的消息,进行处理后给出结果或者将消息发送出去。与Bolt相关的接口和类的关系图如下。

这里写图片描述
Bolt是Storm中基础运行单位,当Task启动时,使用prepare()函数初始化运行时环境,调用execute()函数接收Tuple进行处理,当Task结束时,使用cleanup()函数销毁对象。

IRichBolt是最常用的接口,一般使用IRichBolt定义Bolt。相对IRichBolt而言,BaseRichBolt使用较简单,但灵活性略微降低,类似于IRichSpout和BaseRichSpout的关系。IBatchBolt用来实现批处理。

IBatchBolt主要用于Storm中的批处理,批处理相比较单一的消息处理更为高效。Storm的事务Topology和Trident主要基于IBatchBolt。

BaseStatefulBoltExecutor (待续。。。)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值