前言
Strom特点
进程常驻内存,数据不经过磁盘,在内存中处理,速度非常快,可以达到毫秒(秒)级别
Storm数据传输
采用Netty,基于NIO,更加高效,早期采用ZMQ,但是ZMQ和Strom的license不兼容。
Storm可靠性
- 异常处理
- 消息可靠性的保证机制ACK
Strom和其他框架的对比
1.Spark-Streaming 微批处理框架 秒级,不是纯流式计算框架和Spark核心之上的计算模型,和Spark的其他组件兼容较好。
2.MR 批处理框架,分钟级别,MR模型,反复启停。
3.Strom 秒(毫秒)级别,流式处理,DAG模型有向无环图,常驻运行,不关闭,独立系统专为流式处理设计。
一.Storm编程模型
Spout:用于持续不断的发送数据
Tuple:数据都被封装进tuple容器,进行传输,Storm中发送数据的基本单元,Tuple不断的向后传输,像水滴一样
Bolt:用于接受并处理数据
Stream:从Spout中源源不断传递数据给Blot,以及上一个Blog传递数据给下一个Blot,所组成的数据通道叫做Stream,Stream默认的名称为default,可以为其指定id。
并行度:可以使用多线程模型,充分利用CPU,可以有效应对高并发,高数据量的应用场景,还可以多台服务器,多节点,多线程运行任务
有向无环图(Directed Acyclic Graph):对于Storm实时计算逻辑的封装,即通过一系列由数据流相互关联的Spout、Blot所组成的拓扑结构
二.Storm的分发策略
1、Shuffle Grouping
随机分发,随机派发Stream里面的tuple,保证每个bolt task接收到的tuple的数量大致相同
2、Field Grouping
根据字段分发,例如根据OutputFieldsDeclarer中声明的一个field属性进行分发,field的对应的tuple的值相同,就会分发到同一bolt中去进行处理,filed不同可能就会被分发到不同的task
3、All Grouping
广播模式分发,每一个tuple都会被分发到下一个阶段的所有的bolt中
4、Global Grouping分发
将tuple分发到后续bolt中taskid最小的task中去执行,可以看做是高可用,其他的bolt作为备用,一旦taskid最小的task对应的bolt挂了,还有bolt可以使用,可以保证Storm集群的可用性
5、None Grouping
类似于Shuffle Grouping,不同的是None Grouping采用的是轮训的