01Storm基础

目录

 

storm介绍

storm基本概念

元组 Tuple

流 Stream

龙卷 Spout

闪电 Bolt

拓扑 Topology

主控节点和工作节点

Nimbus进程和Supervisor进程

流分组

工作进程 Worker

任务 Task

配置拓扑的并行度(parallelism)


storm介绍

   storm是一个分布式计算框架,主要使用Clojure和Java语言呢编写,storm分布式计算的特点,大量,实时,不间断的处理数据。

   storm处理过程就像自来水一样,从数据的源头获取数据,通过层层处理下向流,中间可能经过数据的筛选,加工,存储,转换等等操作。

  数据通过一个的处理层,可以分流成几股不同数据流,也可以几个数据流在一个处理层汇合成一个数据流。

  storm有很多的应用场景,比如一个很大流量的门户网站,每时每刻有百万千万的用户访问,并使用。用户使用过程中产生的数据量是非常大的,对于这些数据,需要实时处理,因为每时每刻都有新的数据产生,所以storm就像一个流一样,会一直实时的处理数据。

storm基本概念

元组 Tuple

        元组是构成流的基本数据单位,也是消息传递的基本单位,元组中的字段可以是任意类型的对象。在storm中元组作为其数据模型,storm中的元组支持Java基本类型,字符串,字节数组,以及只要实现序列化接口的对象,都可以当做元组使用。元组本来应该是一个key-value的Map,由于各个组件间传递的字段已经事先定义好,所以只要按序把元组填入各个value即可,所以元组可以看做一个value的List

流 Stream

  Stream是storm的核心抽象,是一个无边界的元组序列,源源不断的传递这元组组成了流。

  流由元组组成,使用OutputFieldsDeclarer声明流以及流的模式

龙卷 Spout

 Spout是流的源头,产生数据的源头,是拓扑的流的来源,Spout是一个主动的角色,在其接口中的nextTuple()方法中会源源不断的产生Tuple,也就是数据。如果流中没有数据,那nextTuple会简单返回。

Spout可以发出超过一个流,使用OutputFieldsDeclarer类的declareStream方法可以声明多个流。使用SpoutOutputStream类的emit方法可以提交流,把数据源头的流提交到下个处理层Bolt

闪电 Bolt

 在一个拓扑中,所有的处理操作都在Bolt中进行处理,也就是我们项目中的业务逻辑部分。

 Bolt是流的处理节点。Spout是流的数据源节点,Bolt可以完成数据的过滤,业务处理,连接运算,连接与访问数据库等等。

 Bolt是一个被动的角色,会不断的接受数据,进行处理,在Bolt接口中有一个execute()方法,在该方法中会获取从上一个处理层传来的数据,从而在这一层进行数据的再次处理。

拓扑 Topology

 拓扑是Strom中运行的一个实时应用程序,由各个组件之间的消息流动二形成的逻辑上的拓扑结构。

01Storm基础

上面是有一个Spout和三个Bolt组成的一个拓扑,图中箭头代表着流,Spout可以发送多个流,Bolt可以发送多个,也可以多个流合并。数据就是从Spout发出,进过多个Bolt向下传递。

在Java中使用TopologyBuilder类来构建拓扑

主控节点和工作节点

在Storm集群中有一个主控节点(Master Node)管理者整个拓扑,有多个工作节点(Work Node)处理者业务逻辑

Nimbus进程和Supervisor进程

主控节点运行这一个Nimbus进程,Nimbus负责集群中分发代码,对节点的分配任务,以及监视主机的故障。

每个工作节点运行着一个Supervisor进程,Supervisor监听其主机上已经分配的主机的作业,启动和停止Nimbus已经分配的工作进程。

流分组

 在拓扑中不同节点之间的流类型是可以不相同的,流分组为每一个Bolt指定应该接受哪些流作为输入流,比如在一个Bolt节点上,希望接受特定标识的key的流,有些Bolt可能希望均匀的接受各个上层传过来的流。

Storm内置8中分组流,(下一篇会详细列出)

工作进程 Worker

工作进程是Spout/Bolt中运行的具体处理逻辑的进程。拓扑跨一个或者多个Worker进程执行。

每一个Worker进程是一个物理的JVM和拓扑执行所有任务的子集。

任务 Task

 Worker中的每一个Spout/Bolt的线程为一个Task。每一个Spout/Bolt在集群中执行多个任务,每一个任务对应一个线程。

通过TopologyBuilder类的setSpout和setBolt方法来设置每个Spout和Bolt的并行度(任务数量)

执行器 Executor

在Storm0.8以后 Task不在于物理线程对应。同一个Spout/Bolt的Task可能会共享一个物理线程,这就是Executor。

01Storm基础

配置拓扑的并行度(parallelism)

注意,这里所说的术语“并行度”主要是用于表示所谓的 parallelism_hint,它代表着一个组件的初始 executor (也是线程)数量。在这篇文章里,我们使用这个“并行度”术语来说明在 Storm 拓扑中既可以配置 executor 的数量,也可以配置 worker 和 task 的数量