什么是Storm
Strom是一个老牌的实时数据处理框架,在Spark Streaming流行前,Storm统治者整个流式计算的江湖。
更详细的说,Storm是一个实时数据处理框架,具有低延迟/高可用/易扩展/数据不丢失等特点,同时,Storm还提供流类似与MapReduce的简单编程模型,便于开发。
Storm与Hadoop的区别
Storm与Hadoop可以说是数据处理中两种极端场景下的不同解决方案,主要区别有:
- Storm用于实时计算,Hadoop用于离线计算
- Storm将处理的数据保存在内存中,Hadoop则保存在HDFS上
- Storm通过网络传输数据,Hadoop将中间数据保存在磁盘上
Storm的使用场景
- 实时监控与日志分析
- 管道系统
- 消息转换
Strom的核心组件
- Nimbus:负责资源分配和任务调度
- Supervisor:负责接收Nimbus分配的任务,启动和停止属于自己的Worker进程
- Worker:运行具体的处理逻辑的进程,Work运行的任务种类只有两种,一种是Spout任务,一种是Blot任务
- Task:Work中的每个Spout/Blot任务都是一个线程,这个线程就是Task。但在0.8版本以后,一个task不再对应一个物理线程,有可能不同但Task共享同一个线程。
Storm编程模型
- Topology:Storm中一个独立的实时计算应用但名称;
- Spout:在一个Toplogy中获源数据流的组件;
- Bolt:接收数据并进行处理的组件,可以在其中定义处理逻辑;
- Tuple:Storm中消息的基本单元,在Spout/Blot之间传递的每条消息就是一个Tuple;
- Stream:表示数据的流向,也可以理解为tuple流转流程
流式计算一般架构
网络系统<-Flume集群<-Kafka集群<-Storm集群<-Redis集群
- Flume用来采集数据
- Kafka用来临时保存数据
- Storm用来实时计算数据
- Redis作为内存数据库保存最终数据