了解风暴架构

时间:2016-07-06 10:20:12

标签: apache-storm

我一直在努力了解风暴架构,但我不确定我是否做到了这一点。我会尽可能准确地解释我认为的情况。请解释一下 - 如果 - 我错了,什么是对的。

初步想法:工人

http://storm.apache.org/releases/2.0.0-SNAPSHOT/Understanding-the-parallelism-of-a-Storm-topology.html表明Worker是一个进程,http://storm.apache.org/releases/2.0.0-SNAPSHOT/Concepts.html具有“工作进程。每个工作进程都是一个物理JVM”,但是http://storm.apache.org/releases/1.0.1/Setting-up-a-Storm-cluster.html表明一个worker是一个节点“灵气和工人机器”。网站http://www.michael-noll.com/tutorials/running-multi-node-storm-cluster/提到“主节点”和“工作节点”。那么:工作者是进程还是物理节点(或者是进程的节点)?因此,我认为有两件事:工作节点工作流程

我认为是真的

正在玩的实体

  • 主节点 =管理服务器
  • 工作人员节点 = 从属节点
  • Nimbus JVM进程,在主节点上运行
  • ZooKeeper ZooKeeper节点上运行的JVM进程
  • 主管 JVM进程,在工作节点上运行
  • 工作进程(JVM),在工作节点上运行
  • 执行者线程,由工作进程运行
  • 任务 Bolts Spouts 的实例),由执行者执行

事情如何运作

Nimbus 是一个JVM进程,在物理主节点上运行,它接收我的程序( Storm拓扑)接受螺栓和喷口并从中生成任务。如果 Bolt 应该并行化三次, Nimbus 会为它生成三个任务 Nimbus ZooKeeper JVM进程询问集群的配置,例如:运行这些任务的位置 ZooKeeper JVM进程告诉 Nimbus 。为了做到这一点, ZooKeeper 主管进行通信(后面会有什么)。 Nimbus 将任务分配给 Workers Nodes ,它们是物理节点。 工作节点 Supervisors 管理,它们是JVM进程 - 对于一个工作节点只有一个 Supervisor 主管管理(启动,停止等)工作进程,它们是在工作节点上运行的JVM进程。每个工作节点可以运行多个工作进程工作进程是JVM进程。它们运行一个或多个称为 Executors 的线程。每个执行程序线程运行一个或多个任务,表示 Bolt Spout 的一个或多个实例,{{ 3}}。

如果这一切都是真的,那就会引发问题:

  • 在一个工作节点上运行多个工作进程有什么意义 - 毕竟一个进程可以使用多个处理器核心,对吗?
  • 如果一个执行者线程必须具有相同的 Bolt / ,则有多个任务运行的重点是什么?喷口?线程仅在一个处理器内核上运行,因此多个 Bolt / Spout 必须相互运行且无法并行化。在Storm拓扑中无限期运行 - 在 Exectuor 线程中有两个相同 Bolt / Spout 的实例是什么意思?

修改:良好的额外资源:but those have to be of the same Bolt

1 个答案:

答案 0 :(得分:1)

首先澄清一下(基本上你做对了)。

  • 术语“节点”和“过程”并不总是一致地使用(不幸的是)。但你得到了“游戏中的实体”是正确的。
  • 关于并行化:任务数由.setNumTasks()确定 - 如果未指定,则与parallelism_hint(设置执行者数量)相同。
  • 关于部署:Nimbus从ZK获取集群配置,但ZK确实决定在哪里运行任务--Nimbus有一个调度程序组件来做出这个决定(基于给定的拓扑,拓扑配置,和集群配置)。

回答你的问题:

  • 单个工作进程仅从单个拓扑执行任务。因此,如果要运行多个拓扑,则需要多个工作JVM。这种设计的原因是容错,即拓扑的隔离。如果一个拓扑失败(可能是由于用户代码错误),崩溃的JVM不会影响其他正在运行的拓扑。
  • 任务允许动态重新平衡并在运行时更改并行度。如果您想更改喷口/螺栓的平行度,则无需任务,您将需要停止并重新部署拓扑。因此,任务数量定义了喷口/螺栓的最大平行度。请参阅https://storm.apache.org/releases/1.0.1/Understanding-the-parallelism-of-a-Storm-topology.html