Storm是Hadoop生态下的一款分布式流处理引擎。相比于Spark Streaming和FIink而言,Storm当属于第一代流处理引擎。本节就来介绍Storm的相关知识。
1.什么是Storm
Storm为分布式实时计算提供了一组通用原语,可被用于“流处理”之中,实时处理消息并更新数据库。这是管理团队及工作者集群的另一种方式。Storm也可被用于“连续计算”(continuous computation),对数据流做连续查询,在计算时就将计算结果以流的形式输出给用户。它还可以被用于“分布式RPC”,以并行的方式运行昂贵的运算。
Storm可以方便的在一个计算机集群中编写与扩展复杂的实时计算,Storm用于实时处理,就好比Hadoop用于批处理。Storm保证每个消息都会得到处理,而且它很快——在一个小集群中,每秒钟可以处理数以百万计的消息。更棒的是你可以使用任意编程语言来做开发。
2.离线计算和流式计算
2.1 离线计算
- 离线计算:批量获取数据、批量传输数据、周期性批量计算数据、数据展示
- 代表技术:Sqoop批量导入数据、HDFS批量存储数据、MapReduce批量计算、Hive
2.2 流式计算
- 流式计算:数据实时产生、数据实时传输、数据实时计算、实时展示
- 代表技术:Flume实时获取数据、Kafka/metaq实时数据存储、Storm/JStorm实时数据计算、Redis实时结果缓存、持久化存储(MySQL)。
- 总结:将源源不断产生的数据实时收集并实时计算,尽可能快的得到计算结果。
2.3 常见的实时计算框架
- Apache Storm
- JStorm:阿里巴巴
- Spark Streaming
- Apache Flink
下面是一个最经典的流式计算的例子:自来水厂生产自来水的过程。

3.Storm和Hadoop的比较
(1)相同点:
- 二者都是分布式计算框架
- 二者的编程模型相似
(2)不同点:
- Storm用于实时计算,Hadoop用于离线计算;
- Storm处理的数据保存在内存中,且源源不断,Hadoop处理的数据保存在HDFS上,成批处理;
- Storm的数据通过网络传输进来,Hadoop的数据来自HDFS。
4.Storm的体系结构
Storm的体系结构如下图所示:

- Nimbus:负责资源分配和任务调度,将任务存到ZooKeeper中。
- ZooKeeper:负责监控Supervisor的状态和分发任务。
- Supervisor:负责接收Nimbus分配到任务,启动和停止属于自己管理的Worker进程。通过配置文件设置当前Supervisor上启动多少个Worker。
- Worker:运行具体处理组件逻辑的进程。Worker运行的任务类型只有两种,一种是Spout任务(采集数据),一种是Bolt任务(处理数据),Bolt任务可以级联。
- Executor:Storm-0.8之后,Executor为Worker进程中的具体的物理线程,同一个Spout/Bolt的Task可能会共享一个物理线程,一个Executor中只能运行隶属于同一个Spout/Bolt的Task。
- Task:Worker中每一个Spout/Bolt的线程称为一个Task。在Storm-0.8之后,Task不再与物理线程对应,不同Spout/Bolt的Task可能会共享一个物理线程,该线程称为Executor。
5.Storm的任务调度过程


6.Storm的运行机制

- 整个处理流程的组织协调不需要用户去关心,用户只需要去定义每一个步骤中的具体业务处理逻辑即可
- 具体执行任务的是Worker,Worker执行任务时具体的行为由我们定义的业务逻辑决定。

网友评论