0%

storm简介

storm简介

Storm是Twitter开源的一款用于实时分析的软件,需要依赖zookeeper、ZeroMQ,zookeeper用来管理集群中的不同组件的协同,ZeroMQ是其核心的内部消息系统,可以简单、可靠地对大量的流式数据进行分析处理

结构

Storm集群包含两种类型的节点,即管理节点和工作节点

管理节点master node

管理节点上运行着一个称为Nimbus的后台进程,负责在集群中分发代码,分配任务给其他机器,并且监控集群的异常状态

工作节点worker node

工作节点上运行着一个叫做Supervisor的后台进程,Supervisor负责接收Nimbus分配给当前的节点任务,启动或者关闭相应的工作进程,每一个工作进程负责执行Topology的一个子集,而一个运行着的Topology由运行在多个节点上的工作进程所组成

Nimbus和Supervisor间的所有协调工作都是由zookeeper来完成的

核心概念

Topology

Topology相当于一张计算图谱,每个节点上都包含有Topology的处理逻辑,通过数据的流动将各个节点联系到一起

Streams

Storm其中的一个核心抽象就是stream流,stream是一个没有边界的元组tuple序列

Storm提供的最基本的处理stream的原语是spout和blot,可以通过spout和blot相应的接口来实现相应的业务逻辑处理

消息源spout是一个Topology里边的消息生产者,一般spout会从外部读取数据,并向Topology中发送tuple,所有的输入流处理逻辑都被封装在blot中,通过blot来进行数据的处理

Streams Groupings

流分组(Streams Groupings)将告诉Topology如何在两个组件之间发送tuple序列,一个spout或者一个blot在集群中有多个并行的task

Storm中有7中类型的流分组

  • Shuffle Grouping,随机分组,随机分发stream中的tuple,使得bolt的每个task接收到的tuple数目大致相同
  • Fields Grouping,按照字段来进行分组,指定某个字段,具有相同的字段值的tuple将会分发到相同的task
  • ALL Grouping,广播发送,bolt的所有task都将接收到广播的tuple
  • Global Grouping,全局分组,整个stream都将被发送到其中一个bolt的一个task
  • None Grouping,不分组,storm会将当前的bolt放到与这个bolt订阅的bolt或者spout的同一个线程中去执行
  • Direct Grouping,直接分组,该方式是消息的发送者指定消息的接收者的哪个task来处理这个消息
  • Local or Shuffle Grouping,如果目标bolt在同一个工作线程中拥有一个或多个task,tuple将会随机地发送给这些task,否则和Shuffle Grouping的处理方式相同

欢迎关注我的其它发布渠道