专注于 JetBrains IDEA 全家桶,永久激活,教程
持续更新 PyCharm,IDEA,WebStorm,PhpStorm,DataGrip,RubyMine,CLion,AppCode 永久激活教程

初识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中各个节点之间的关系

93_1.png

附录

本文来自<Storm实战>。推荐。这本书可以基本理解storm。

文章永久链接:https://tech.souyunku.com/47249

未经允许不得转载:搜云库技术团队 » 初识Storm

JetBrains 全家桶,激活、破解、教程

提供 JetBrains 全家桶激活码、注册码、破解补丁下载及详细激活教程,支持 IntelliJ IDEA、PyCharm、WebStorm 等工具的永久激活。无论是破解教程,还是最新激活码,均可免费获得,帮助开发者解决常见激活问题,确保轻松破解并快速使用 JetBrains 软件。获取免费的破解补丁和激活码,快速解决激活难题,全面覆盖 2024/2025 版本!

联系我们联系我们