Storm的一些基本概念
1、 Topology:数据流串连起来多个计算单元的执行图
2、 Tuple:数据传输的形式
3、 Stream:两个计算单元(节点)之间的Tuples无界序列
4、 Spout:从数据源获取数据,不处理数据
5、 Bolt:对数据进行转换或者计算
6、 Parallism hit:设置创建Spout或者Bolt实例的线程数
7、 Exetutors:JVM的一个线程,他能在运行时做改变,以应对数据增长,比如增长 到与tasks数量一致
8、 Tasks:在一个executor里面的Spouts或者Bolts实例,运行时不好改变,比如 fields grouping,hash的bolts数量变了,无法找到之前的bolt
9、 Anchoring:把当前节点的tuple锚定到输入的tuple树上去,手动emit需要加上 tuple一起
10、 Ack:事件被成功处理,outputCollector标记,Spout发现tuple被完全处理 了,会调用这个方法
11、 Fail:分不同的情况标记tuple处理失败,会重新从Spout再走一遍流程,Spout 在fail的情况会调用这个方法
12、 worker:每一个worker process是一个JVM
13、 worker Node:一个worker Node有多个worker,他是一个物理机或者是虚拟 机器
14、 master
:有且仅有一个;Nimbus
:master节点运行的后台,他发现一个worker node挂掉的时候,会自动重启它;Supervisor
:worker node运行的后台,与Nimbus通信通过Zookeeper
Storm的Grouping策略
- Stream Grouping:数据如何在多个Spout实例和多个Bolt实例之间传送
- shuffle grouping:每个bolt实例之间收到的tuple数量基本是一致的
- fields grouping:同一个值的字段会被送到同一个bolt实例
- global grouping:整个流的tuple都会进入同一个bolt实例【相当于只有1 个实例的shuffle grouping】
Storm的一些方法基本用途
- BaseRichSpout:
declareOutputFields:定义传送tuple中值的名字
open:连接数据源,获取数据
nextTuple:当storm已经练接好数据源,它来发送数据到下游
SpoutOutputCollector:发送tuple,处理失败的tuple
- BaseBasicBolt:自动锚定并ack,适用于单个tuple进来,单个tuple出去
exetute:处理上游tuple,并发送tuple到下游,一个bolt的实例,它的
execute方法每次只处理一个tuple
prepare:初始化时候用
BasicOutputCollector:发送tuple,处理失败的tuple
- TopologyBuilder:定义Spout与Bolt之间的关系,以及流分组的方式
- Config:做拓扑级别的配置
- StormTopology:TopologyBuilder的产物,并提交到集群
- TickTuple:bolt级别设置定时触发器,首先在config中设置Tick触发时机,然后 通过tuple的streamId判断是否是是Ticktuple.触发的频率storm会努力做 到预设值一致
Storm的重试
1、 至多一次处理
tuple处理成功就成功,失败就失败,不做任何处理,即不保证可用。spout不传tuple就可以了
2、 至少一次处理
每个tuple必须处理成功至少一次,需要保证在spout,数据源,流锚定,tuple被ack或者fail
3、 只处理一次
每个tuple一单被处理成功,不能再次被处理。需要考虑:A 处理的任务是单元化的,B记录单元化任务处理的结果。同时A,B两步操作必须是原子操作。在处理单元任务,如果单元任务非幂等,那么再次重做相当于至多处理了一次【场景1】,所以单元任务处理必须得保证是幂等的。
BaseBasicBolt和BaseRichBolt的一些差异
- baseBasicBolt:自动锚定。
锚定的时机:执行emit方法的那一刻;
ack:execute方法执行结束;
fail:execute执行过程中出现任何问题; - baseRichBolt: 需要编码实现锚定ack和fail 。
锚定操作:emit的时候添加tuple -> emit(tuple,new Values(..));
ack:使用outputcollector.ack(tuple);
fail:要重发需要自己发送保存好的数据
Storm中各个节点之间的关系
附录
本文来自<Storm实战>。推荐。这本书可以基本理解storm。