Storm 从入门到精通 第二讲 Storm体系结构

时间:2021-10-24 20:47:42

1. Storm Vs Hadoop


Hadoop上运行的是MapReduce的作业(Job),而在Storm上运行的是Topology

Storm和 Hadoop 关键的区别是:
Hadoop的MapReduce作业最终会结束,而Storm的Topology会一直运行(除非显式地杀掉它)

如果说批处理的 Hadoop需要一桶桶地搬走水,那么 Storm就好比自来水水管,只要预先接好水管,然后打开水龙头,水就源源不断地流出来了,即消息就会被实时地处理.

Storm 从入门到精通 第二讲 Storm体系结构


在 Storm的集群中有两种节点:
主节点( Master Node) Nimbus和工作节点( WorkerNode) Supervisor

主节点( Master Node) Nimbus
类似于 Hadoop中的 Job Tracker, Nimbus负责在集群中分发代码,分配工作给机器,并且监控状态。

Supervisor进程(类似于 Task Tracker):
Supervisor会监听 Nimbus分配给那台机器的工作,根据需要启动/关闭具体的 Worker进程
每个 Worker进程执行一个具体的 Topology, Worker进程中的执行线程称为 Executor,可以有一个或者多个。

每个 Executor中又可以包含一个或者多个Task

Task为 Storm中最小的处理单元。

一个运行的 Topology由运行在一台或者多台工作节点上的 Worker进程来完成具体的业务执行。

2. Storm集群架构

Storm 从入门到精通 第二讲 Storm体系结构

Nimbus
Storm集群的Master节点,负责分发用户代码,用于响应分布在集群中的节点,分配任务和监测故障,指派给具体的Supervisor节点上的Worker节点,去运行Topology对应的组件(Spout/Bolt)的Task。这个很类似亍 Hadoop中的 Job Tracker

Supervisor
Storm集群的从节点,负责管理运行在Supervisor节点上的每一个Worker进程的启动和终止。通过Storm的配置文件中的supervisor.slots.ports配置项,可以指定在一个Supervisor上最大允许多少个Slot,每个Slot通过端口号来唯一标识,一个端口号对应一个Worker进程(如果该Worker进程被启动)。

supervisor.slots.ports:supervisor上能够运行workers的端口列表.每个worker占用一个端口,且每个端口只运行一个worker.通过这项配置可以调整每台机器上运行的worker数.(调整slot数/每机)

Worker
运行具体处理组件逻辑的进程。Worker运行的任务类型只有两种,一种是Spout任务,一种是Bolt任务。

Task
Worker中每一个spout/bolt的线程称为一个task. 在storm0.8之后,task不再与物理线程对应,不同spout/bolt的task可能会共享一个物理线程,该线程称为executor。

Zookeeper
用来协调Nimbus和Supervisor,如果Supervisor因故障出现问题而无法运行Topology,Nimbus会第一时间感知到,并重新分配Topology到其它可用的Supervisor上运行

Storm 从入门到精通 第二讲 Storm体系结构

1. 客户端提交拓扑到nimbus;
2. Nimbus针对该拓扑建立本地的目录根据Topology的配置计算Task,分配Task,在Zookeeper上建立Assignments节点存储Task和Supervisor机器节点中Woker的对应关系;
3. 在Zookeeper上创建Task beats节点来监控Task的心跳;启动topology。
4. Supervisor去Zookeeper上获取分配的Tasks,启动多个Woker进行,每个Woker启动一个或者多个Executors,线程中执行Task;

5. 根据Topology信息初始化建立Task之间的连接;Task和Task之间是通过ZeroMQ、NettyRPC管理的通信;

3. Storm 核心组件

1.Topology
一个实时计算应用程序逻辑上被封装在 Topology对象中,类似 Hadoop中的作业与作业不同的是, Topology会一直运行直到显式地杀死它
Storm中运行的一个实时应用程序,因为各个组件间的消息流动形成逻辑上的一个拓扑结构。
一个 Topology是 Spouts和Bolts组成的流程图,通过 Stream Groupings将图中的 Spouts和 Bolts连接起来,完成实时流业务逻辑处理。
Storm 从入门到精通 第二讲 Storm体系结构
2. Nimbus
负责资源分配和任务调度,类似 Hadoop中的 Jobtracker
3. Supervisor
负责接受 Nimbus分配的任务,启动和停止属于自己管理的 Worker进程,类似Hadoop中的 Task Tracker
4. Worker
运行具体处理组件逻辑的进程
5. Executor
Storm0.8之后, Executor为 Worker进程中的具体的物理线程,同一个 Spout、Bolt的Task可能会共享一个物理线程,一个 Executor中只能运行隶属于同一个Spout/ Bolt的Task
6. Task
一个 Spout/ Bolt具体要做的工作,也是各个节点之间进行分组的单位
7. Spout
在 Topology中产生源数据流的组件。通常 Spout获取数据源的数据(如 Kafka、MQ等读取数据),然后调用 nextTuple函数,发射数据供Bolt消费
Storm 从入门到精通 第二讲 Storm体系结构

8. Bolt
在 Topology中接受 Spout的数据然后执行处理的组件。Bolt可以执行过滤、函数操作、合并、写数据库等任何操作。Bolt在接收到消息后会调用 execute函数,用户可以在其中执行自己想要的操作

Storm 从入门到精通 第二讲 Storm体系结构


9. Tuple
消息传递的基本单元

10. Strean
源源不断传递的 Tuple组成了 Stream

11. Stream分组
即消息的分区( partition)方法 Storm中提供若干种实用的分组方式,包括 Shuffle、Fields、All、 Global、None、 Direct和 Local or shuffle等