ISpout接口

概述

  1. 核心接口(interface),负责将数据发送到topology中去处理。<br />
  2. Storm会跟踪Spout发出去的tupleDAG<br />
  3. ack/fail<br />
  4. tuplemessage id (每一次发出去的tuple都有一个messageid,保证如果错误的话messageId可以回传)<br />
  5. ack/fail/nextTuple 是在同一个线程中执行的,所以不用考虑线程安全

源码

  1. public interface ISpout extends Serializable {
  2. void open(Map conf, TopologyContext context, SpoutOutputCollector collector);
  3. void close();
  4. void activate();
  5. void deactivate();
  6. void nextTuple();
  7. void ack(Object msgId);
  8. void fail(Object msgId);
  9. }

核心方法

  • open:初始化操作
  • close:资源释放. 不一定被调用,比如执行了kill -9
  • nextTuple:发送数据
  • ack:tuple处理成功,storm会反馈给spout一个成功消息
  • fail:tuple处理失败,storm会发送一个消息给spout,处理失败

实现类

public abstract class BaseRichSpout extends BaseComponent implements IRichSpout

public interface IRichSpout extends ISpout, IComponent

DRPCSpout

ShellSpout


IComponent接口

概述

  1. #为topology中所有可能的组件提供公用方法
  2. public interface IComponent extends Serializable
  1. # 用于声明当前Spout/Bolt发送的tuple的名称 ,使用outputFiledsDeclarer配合使用
  2. void declareOutputFields(OutputFieldsDeclarer var1);


IBolt接口

概述

  1. 接收tuple处理,并进行相应的处理(filter/jion/...)
  2. Holdtuple再处理
  3. IBolt会再一个运行的机器上创建,使用java序列化它,然后提交到主节点(nimbus
  4. nimbus启动worker来反序列化,调用prepare方法,然后才开始处理数据。

核心方法

  • prepare:初始化
  • execute:处理一个tuple数据,tuple对象中包含了元数据信息
  • cleanup:shutdown之前的资源清理操作。不一定被调用,比如执行了kill -9

实现类

  1. public abstract class BaseRichBolt extends BaseComponent implements IRichBolt
  1. public interface IRichBolt extends IBolt, IComponent