初识Storm

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。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 文本获取和搜索引擎如何评估一个算法是否有效

    coursera课程 text retrieval and search engine 第三周 推荐。

    爬蜥
  • 常见动态规划的解决思路

    给定一个词的集合words,使用badness(i,j)表示使用的单词是words[i,j]

    爬蜥
  • 常用算法之贪心算法

    思路:求解问题时,总是选当前最好的选择,不从整体上考虑。因而选用贪心算法必须保证当前选的最好的必定是整体最好的。

    爬蜥
  • python基础知识——内置数据结构(元组)

    分片的含义是一个子集,定义两个索引,分片是从第一个索引到第二个索引,不包括第二个索引之间的元素组成的元组。

    zhaozhiyong
  • python基础知识——内置数据结构(元组)

    python中的内置数据结构主要有元组、列表和字典。本篇主要介绍元组。 元组由不同的元素组成,每个元素可以存储不同类型的数据,如字符串、数字甚至是元组。 1、元...

    zhaozhiyong
  • Storm消息处理可靠性保证

    Storm可以保证每一个从spout发出的消息能被完全处理。本章描述storm是如何完成这个保证以及用户如何从storm的可靠性能力获益的。 消息“完全处理”的...

    囚兔
  • 元组-tuple

    Python内置的元组数据类型:tuple tuple和list非常类似,但tuple一旦初始化就不能修改,因此它没有append(),insert()这样...

    py3study
  • C++11中的tuple应用:让函数返回多个值

    一见
  • Python3学习笔记 | 八、Python的类型与运算-元组

    元组在Python里的特点: • 任意对象的有序组合 • 通过偏移取数据 • 属于不可变序列类型 • 固定长度,异构,任意嵌套 • 对象引用的数组

    TeamsSix
  • Python tuple(元组)

    tuple即元组,与list类似,差别在于tuple中的元素一旦初始化就不可更改,即tuple是操作受限制的list(不能更改)。 list参见:http...

    Steve Wang

扫码关注云+社区

领取腾讯云代金券