1.Component 组件
注:上图中用红框圈出的是3个常用的API。
1)基本接口
(1)IComponent 接口
(2)ISpout 接口
(3)IRichSpout 接口
(4)IStateSpout 接口
(5)IRichStateSpout 接口
(6)IBolt 接口
(7)IRichBolt 接口
(8)IBasicBolt 接口
2)基本抽象类
(1)BaseComponent 抽象类
(2)BaseRichSpout 抽象类
(3)BaseRichBolt 抽象类
(4)BaseTransactionalBolt 抽象类
(5)BaseBasicBolt 抽象类
2 Spout 水龙头
Spout 的最顶层抽象是 ISpout 接口。
(1)open()
是初始化方法。
(2)close()
在该 Spout 关闭前执行,但是并不能得到保证其一定被执行,kill -9 时不执行,Storm kill {topoName} 时执行。
(3)activate()
当 Spout 已经从失效模式中激活时被调用。该 Spout 的 nextTuple() 方法很快就会被调用。
(4)deactivate ()
当 Spout 已经失效时被调用。在 Spout 失效期间,nextTuple 不会被调用。Spout 将来可能会也可能不会被重新激活。
(5)nextTuple()
当调用 nextTuple() 方法时,Storm 要求 Spout 发射元组到输出收集器(OutputCollecctor)。
nextTuple() 方法应该是非阻塞的,所以,如果 Spout 没有元组可以发射,该方法应该返回。
nextTuple()、ack() 和 fail() 方法都在 Spout 任务的单一线程内紧密循环被调用。
当没有元组可以发射时,可以让 nextTuple 去 sleep 很短的时间,例如1毫秒,这样就不会浪费太多的 CPU 资源。
(6)ack()
成功处理 Tuple 回调方法。
(7)fail()
处理失败 Tuple 回调方法。
原则:通常情况下(Shell 和事务型的除外),实现一个 Spout,可以直接实现接口 IRichSpout,如果不想写多余的代码,可以直接继承 BaseRichSpout。
3 Bolt 转接头
Bolt 的最顶层抽象是 IBolt 接口。
(1)prepare()
prepare() 方法在集群的工作进程内被初始化时被调用,提供了 Bolt 执行所需要的环境。
(2)execute()
接受一个 Tuple 进行处理,也可 emit 数据到下一级组件。
(3)cleanup()