初识Storm

本文介绍了Storm实时计算系统的基础概念,包括实时性、分布式和高容错特性。讲解了Storm的计算模型,如元组(Tuple)、Spout、Bolt和Stream Grouping(数据流分组策略)。同时,对比了Storm与MapReduce、SparkStreaming的差异,强调了Storm在数据处理中的异步同步模式以及不同数据分发策略的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Storm基础

​ Storm是个实时的、分布式以及具备高容错的计算系统

​ 实时性—进程常驻内存 数据少量经过磁盘,在内存中处理

​ 分布式—集群操作

​ 高容错—节点宕机,信息处理不完整(acker机制来解决这些问题)

Storm计算模型

[外链图片转存失败(img-nMFRjtuU-1563924936197)(C:\Users\86158\AppData\Roaming\Typora\typora-user-images\1561173142512.png)]

Tuple – 元组,Stream中最小数据组成单元

Spout – 数据源 (假) 发送数据/推送数据

​ 本身不会产生数据,通过客户端得到数据(2个方法:OutputFieldsDeclarer、nextTuple)

​ 一个Spout可以发送多个数据流(Stream)

​ OutputFieldsDeclarer中的declare方法声明定义的不同数据流 --为推送准备好数据类型

​ Spout中最核心的方法是nextTuple --不断推送

Bolt – 数据流处理组件 接受数据

​ 拓扑中数据处理均有Bolt完成。对于简单的任务或者数据流转换,单个Bolt可以简单实现;更加复杂场景往往需要多个Bolt分多个步骤完成

​ 一个Bolt可以发送多个数据流(Stream)​

​ Bolt中最核心的方法是execute方法 --接收、执行数据

​ OutputFieldsDeclarer中的declare方法声明定义的不同数据流 --为推送准备好数据类型

Stream – 汇聚tuple形成的数据流

​ 从Spout中源源不断传递数据给Bolt、以及上一个Bolt传递数据给下一个Bolt,所形成的这些数据通道即叫做Stream

​ 当数据少,需要单一流时,不需要设streamID(默认ID是default),但是数据多要使用多个流时每个流都要设置数据流的ID,便于后期数据的汇聚。

Stream Grouping – 数据流分组(即数据分发策略)

DAG – 有向无环图的实现

​ 对于Storm实时计算逻辑的封装即,由一系列通过数据流相互关联的Spout、Bolt所组成的拓扑结构

​ 生命周期:此拓扑只要启动就会一直在集群中运行,直到手动将其kill,否则不会终止

​ 区别于MapReduce当中的Job,MR当中的Job在计算执行完成就会终止

架构

​ Nimbus 分配任务、资源调度、上传jar包

​ Supervisor 开启进程(可以开启n个woker)

​ Worker 执行任务(可以执行n个task(spolt–推送数据/bolt–逻辑单元处理)任务)

编程模型

​ DAG (Topology) --单向运作

​ component组件: Spout Bolt

流式处理(异步 与 同步)

异步:客户端提交数据进行结算,并不会等待数据计算结果

​ 例:计算PV(访问量)、UV(独立访客)、访问热点以及 某些数据的聚合、加和、平均等

[外链图片转存失败(img-UXbpTmGe-1563924936197)(C:\Users\86158\AppData\Roaming\Typora\typora-user-images\1561172658515.png)]

同步:客户端提交数据请求之后,立刻取得计算结果并返回给客户端

​ 例:图片特征提取

[外链图片转存失败(img-RGE1L5Up-1563924936198)(C:\Users\86158\AppData\Roaming\Typora\typora-user-images\1561172700515.png)]

Storm与MapReduce、SparkStreaming对比

StormMapReduceSparkStreaming
流式处理批处理微批处理
(毫)秒级分钟级秒级
DAG模型Map+Reduce模型
常驻运行反复启停
已经很稳定稳定性改进
独立系统,专为流式计算设计spark核心之上一种计算模型
能与其他组件很好结合
数据流分组-数据分发策略(4+4)

Shuffle grouping(随机分组):这种方式会随机分发tuple给bolt的各个task,每个bolt实例接收到的相同数量的tuple。

Fields grouping(按字段分组):根据指定字段的值进行分组。比如说,一个数据流根据“word”字段进行分组,所有具有相同“word”字段值的tuple会路由到同一个bolt的task中。

All grouping(全复制分组):将所有的tuple复制后分发给所有bolt task。每个订阅数据流的task都会接收到tuple的拷贝。

Globle grouping(全局分组):这种分组方式将所有的tuples路由到唯一一个task上。Storm按照最小的task ID来选取接收数据的task。 —可以做高可用

None grouping(不分组):在功能上和随机分组相同,是为将来预留的。

Direct grouping(指向型分组):数据源会调用emitDirect()方法来判断一个tuple应该由哪个Storm组件来接收。只能在声明了是指向型的数据流上使用。

Local or shuffle grouping(本地或随机分组):和随机分组类似,但是,会将tuple分发给同一个worker内的bolt task(如果worker内有接收数据的bolt task)。其他情况下,采用随机分组的方式。取决于topology的并发度,本地或随机分组可以减少网络传输,从而提高topology性能。

CustomGrouping(自定义分组):相当于MapReduce自己去实现一个partition

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值