storm
-
storm是一个实时计算系统。
适用于实时分析,在线机器学习,持续计算的流式计算系统。 -
特点: 速度快,每秒每节点处理数据百万tuple级别的
-
工作形式: topology
无状态,集群状态和分布式环境形式在zk中保存
确保每个消息至少被消费一次
storm和hadoop的区别
- storm用于实时计算,hadoop用于离线计算
- storm 处理的数据保存在内存中,源源不断,hadoop处理的数据保存在文件系统中,一批一批的。
- storm的数据通过网络传输进来,hadoop的数据保存在磁盘中
- storm与hadoop的编程模型相似。
编程模式:
- DataSource: 数据源,如淘宝产生的数据,都是实时数据。
- tuple: 元组,数据结构,是有序的元素列表,通常是任意类型的数据,使用,号分割,交给storm计算。一次消息传递的基本单元,一组或者一条消息就是一个tuple。
- stream: 就是一系列的tuple。
- spout: 在一个topology中获取源数据的组件。
通常情况下spout会从外部数据源中读取数据,然后转换为topology内部的数据源。 - bolt: 是一个转接头,逻辑处理单元,接受数据然后执行处理的组件,用户可以在其中执行自己想要的操作。spout数据传输给bolt,bolt处理后产生新的数据,可以filter,聚合,分组接收数据–> 处理 --> 输出给bolt(多个)。
- topology: storm中运行的一个实时应用程序的名称。它不会停止的,时刻在运行。除非手动杀死,MR是会停止的
- task: spout和bolt的执行过程就是task,
- worker: 工作节点。storm在woker之间均衡分发任务,监听job,启动或者停止进程。
- Stream Grouping: 表示数据的流向。控制tuple如何进行路由,也就是分组策略,内置四个分组策略。
storm架构
Storm集群采用主从架构方式,主节点是Nimbus,从节点是Supervisor,有关调度相关的信息存储到ZooKeeper集群中,架构如下图所示:
总体的Topology处理流程图为:
具体的topology的流程:
组件
- nimubs: master node,在work node间分发数据,负责资源分配和任务调度,指派给task给woeker node,监控故障。主要工作是运行topology,分析topology,手机执行的task,将task分发给可用的supervisor。
- supervisor: work node,有多个处理进程,负责接收nimbus分配的任务,每个工作节点存在一个。。启动和停止属于自己管理的worker进程。通过配置文件设置当前supervisor上启动多少个worker。代理task所有的work进程,work进程孵化出足够的线程供task运行;在nimubs和supervisor之间使用内部的消息系统进行通信。
nimubs和supervisor之间的所有协调工作都是zookeeper集群完成的。 - worker: 运行具体处理组件逻辑的进程。worker运行的任务类型只有两种,一种spout,一种bolt
- work prcess: 执行相关的task,创建executor(执行线程),可以有多个执行线程‘
- task: worker中每一个apout/bolt的线程称为一个task。处理数据的,就是一个任务
- zookeeper: 状态都是保存在zookeeper上的,zk可以维护状态。
spout,bolt线程–>task;
共享同一个executor线程
本质就是在一个executor线程上,会执行很多task,就是说executor是线程,task是executor处理一个或者多个任务的,整个任务就是spout,bolt。task本质就是一个节点类的实列的对象。