ISpout接口
概述
核心接口(interface),负责将数据发送到topology中去处理。<br />
Storm会跟踪Spout发出去的tuple的DAG<br />
ack/fail<br />
tuple:message id (每一次发出去的tuple都有一个messageid,保证如果错误的话messageId可以回传)<br />
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