Storm学习笔记

#Storm

牛逼的产品就是使用起来简单,而自身内含不简单,Storm就是之一。

流处理框架Storm简介

Storm简介

这些文章写的非常好,做一些学习笔记。

###介绍

分主从2种节点,3种不同的Daemon:Nimbus运行在主节点上, 从节点上运行Supervisor,每个从节点上还有一系列的worker process来运行具体任务。Daemon之间的信息交换统统是通过Zookeeper来实现。

Nimbus,主要负责接收客户端提交的Topology,进行相应的验证,分配任务,进而把任务相关的元信息写入Zookeeper相应目录,还负责通过Zookeeper来监控任务执行情况;

Supervisor,负责监听Nimbus分配的任务,根据实际情况启动/停止工作进程(Worker);

Worker,运行具体处理组件逻辑的进程;

过程涉及到了3个相关实体:

  1. Worker:一个完整的Topology是由分布在多个节点上的Worker进程来执行的,每个Worker都执行(且仅执行)Topology的一个子集。

  2. Executor:在每个Worker内部,会有多个Executor,每个executor对应一个线程。

  3. Task:执行具体数据处理的相关实体,也就是用户实现的Spout/Blot实例。Storm中,一个executor可能会对应一个或者多个task。这就是说,系统中executor的数量是小于等于task的数量的。

Storm和Hadoop的对比:

Hadoop Storm
JobTracker Nimbus
TaskTracker Supervisor
Child Worker
Job Topology
Mapper/Reducer Spout/Bolt
  1. Topology:Storm中运行的一个实时应用程序,因为各个组件间的消息流动形成逻辑上的一个拓扑结构。

  2. Spout:在一个Topology中产生源数据流的组件。通常情况下Spout会从外部数据源中读取数据,然后转换为Topology内部的源数据。Spout是一个主动的角色,其接口中有个nextTuple()函数,Storm框架会不停地调用此函数,用户只要在其中生成源数据即可。

  3. Bolt:在一个Topology中接受数据然后执行处理的组件。Bolt可以执行过滤、函数操作、合并、写数据库等任何操作。Bolt是一个被动的角色,其接口中有个execute(Tuple input)函数,在接受到消息后会调用此函数,用户可以在其中执行自己想要的操作。

  4. Tuple:一次消息传递的基本单元。本来应该是一个Key-Value的map,但是由于各个组件间传递的Tuple的字段名称已经事先定义好,所以Tuple中只要按序填入各个value就行了,所以就是一个value list.

  5. Stream:源源不断传递的tuple就组成了Stream。

  6. Stream Grouping: Storm中提供若干种实用的grouping方式,包括shuffle, fields hash, all, global, none, direct和localOrShuffle等。

Storm记录级容错的基本原理和事务拓扑可以参考文前的链接文章。