ISpout接口

概述

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

源码

public interface ISpout extends Serializable {
    void open(Map conf, TopologyContext context, SpoutOutputCollector collector);

    void close();

    void activate();

    void deactivate();

    void nextTuple();

    void ack(Object msgId);

    void fail(Object msgId);
}

核心方法

  • 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接口

概述

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

IBolt接口

概述

​ 接收tuple处理,并进行相应的处理(filter/jion/...)

​ Hold住tuple再处理

​ IBolt会再一个运行的机器上创建,使用java序列化它,然后提交到主节点(nimbus)

​ nimbus启动worker来反序列化,调用prepare方法,然后才开始处理数据。

核心方法

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

实现类

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

标签: Storm

仅有一条评论

  1. liu liu

    真棒

添加新评论