鲲鹏社区首页
中文
注册
我要评分
文档获取效率
文档正确性
内容完整性
文档易理解
在线提单
论坛求助

Storm介绍

Storm基本组件

  1. Nimbus

    负责在集群里面发送代码,分配工作给机器并且监测状态,在集群中只有一个。

  2. ZooKeeper

    Storm重点依赖的外部资源,Nimbus、Supervisor和Worker等都是把心跳数据保存在ZooKeeper上,Nimbus也是根据ZooKeeper上的心跳和任务运行状况进行调度和任务分配的。

  3. Supervisor

    在运行节点上,监测分配的任务,根据需要启动或关闭工作进程Worker。每一个要运行Storm的机器上都运行一个Supervisor。

  4. Worker

    在Supervisor上创建的一个JVM实例,Worker中运行Executor,而Executor作为Task运行的容器。

  5. Executor

    运行时Task所在的直接容器,在Executor中执行Task的处理逻辑。一个或多个Executor实例可以运行在同一个Worker进程中,一个或多个Task可以运行于同一个Executor中。

  6. Task

    Spout/Bolt在运行时所表现出来的实体,都称为Task,一个Spout/Bolt在运行时可能对应一个或多个Spout Task或Bolt Task。

Storm流处理流程

在Storm中可以通过组件简单串行或者组合多种流操作处理数据。

  1. Storm组件简单串行。

    这种方式是最简单最直观的,只要将Storm的组件(Spout或Bolt)串行起来即可实现,只需要了解编写这些组件的基本方法即可。

  2. Storm组合多种流操作。
  3. Storm支持流聚合操作,将多个组件的数据汇聚到同一个处理组件来统一处理,可以实现对多个Spout组件通过流聚合到一个Bolt组件(Sout到Bolt的多对一、多对多操作),也可以实现对多个Bolt通过流聚合到另一个Bolt组件(Bolt到Bolt的多对一、多对多操作)。

Storm基本概念

Storm提交运行的程序称为Topology,它处理的最小的消息单位是一个Tuple,也就是一个任意对象的数组。Topology由Spout和Bolt构成,Spout是发出Tuple的结点,Bolt可以随意订阅某个Spout或者Bolt发出的Tuple。图1是一个Topology设计的逻辑图的例子。

图1 Topology设计的逻辑图
  1. Topology

    Topology是一个用来编排、容纳一组计算逻辑组件(Spout、Bolt)的对象,这一组计算组件可以按照DAG图的方式编排起来从而组合成一个计算逻辑更加复杂的对象。一个Topology运行以后就不能停止,它会无限地运行下去,除非手动干预(显式执行bin/storm kill)或意外故障(如停机、整个Storm集群挂掉)让它终止。

  2. Spout

    Spout是一个Topology的消息生产的源头,Spout是一个持续不断生产消息的组件, Spout生产的消息在Storm中被抽象为Tuple,在整个Topology的多个计算组件之间都是根据需要抽象构建的Tuple消息来进行连接,从而形成流。

  3. Bolt

    Storm中消息的处理逻辑被封装到Bolt组件中,任何处理逻辑都可以在Bolt里面执行,Bolt可以接收来自一个或多个Spout的Tuple消息,也可以来自多个其它Bolt的Tuple消息,也可能是Spout和其它Bolt组合发送的Tuple消息。

  4. Stream Grouping

    Storm中用来定义各个计算组件(Spout和Bolt)之间流的连接、分组和分发关系。Storm定义了如下7种分发策略:Shuffle Grouping(随机分组)、Fields Grouping(按字段分组)、All Grouping(广播分组)、Global Grouping(全局分组)、Non Grouping(不分组)、Direct Grouping(直接分组)、Local or Shuffle Grouping(本地/随机分组)。

Storm拓扑提交流程

  1. 客户端通过Nimbus的接口上传程序jar包到Nimbus的Inbox目录中,上传结束后,便向Nimbus提交了一个Topology。
  2. Nimbus接收到提交Topology的命令后,对接收到的程序JAR包进行序列化。静态的信息设置完成后,通过心跳信息分配任务到机器节点。之后,系统根据Worker的数目,尽量平均的分配这些Task的执行。其中Worker在哪个Supervisor节点上运行是由Storm本身决定的。
  3. 任务分配好之后,Nimbus节点会将任务的信息提交到ZooKeeper集群,同时在ZooKeeper集群中会有Worker分派节点,这里存储了当前Topology的所有Worker进程的心跳信息。
  4. Supervisor节点会不断的轮询ZooKeeper集群,在ZooKeeper的分派节点中保存了所有Topology的任务分配信息、代码存储目录和任务之间的关联关系等,Supervisor通过轮询此节点的内容,来领取自己的任务,启动Worker进程运行。

一个Topology运行之后,就会不断的通过Spout来发送Stream流,通过Bolt来不断的处理接收到的数据流。