了解风暴架构

Understanding the Storm Architecture

我一直在努力理解风暴架构,但我不确定我是否理解正确。我会尽量准确地解释我认为的情况。请解释什么 - 如果 - 我错了,什么是对的。

初步想法:工人

http://storm.apache.org/releases/2.0.0-SNAPSHOT/Understanding-the-parallelism-of-a-Storm-topology.html suggests that a Worker is a process as does http://storm.apache.org/releases/2.0.0-SNAPSHOT/Concepts.html with "worker processes. Each worker process is a physical JVM", however http://storm.apache.org/releases/1.0.1/Setting-up-a-Storm-cluster.html states that a worker is a node with "Nimbus and worker machines". The website http://www.michael-noll.com/tutorials/running-multi-node-storm-cluster/ 提到了 "master node" 和 "worker nodes"。那又怎样:worker 是进程还是物理节点(或者节点是进程)?因此我认为有两件事:Worker NodesWorker Processes.

我认为是真实的

游戏中的实体

工作原理

Nimbus 是一个 JVM 进程,运行在物理 主节点 上运行,接收我的程序(Storm 拓扑) 采用 Bolts 和 Spouts 并从中生成 tasks。如果 Bolt 应该被并行化三次,那么 Nimbus 会为它生成三个 tasksNimbusZooKeeper JVM 进程询问集群的配置,例如运行 那些 任务 ZooKeeper JVM 进程告诉 Nimbus。为了做到这一点,ZooKeeperSupervisors 进行通信(它们稍后会出现)。 Nimbus 将任务分发到 Workers Nodes,它们是物理节点。 Worker NodesSupervisors 管理,它们是 JVM 进程 - 恰好一个 Supervisor 对一个 工作节点主管 管理(启动、停止等)工作进程,它们是 运行 在 [=31= 上的 JVM 进程]工作节点。每个 Worker Node 可以有多个 Worker Processes 运行ning。 工作进程 是 JVM 进程。他们 运行 一个或多个线程称为 Executors。每个 Executor Thread 运行s 一个或多个 Tasks,意味着 Bolt[=108] 的一个或多个实例=] 或 Spoutbut those have to be of the same Bolt

如果这一切都是真的,那么问题来了:


编辑: 很好的附加资源:http://www.tutorialspoint.com/apache_storm/apache_storm_cluster_architecture.htm

首先说明几点(基本上你没看错)。

  • 术语 "node" 和 "process" 并不总是一致地使用(不幸的是)。但是你 "Entities in Play" 正确。
  • 关于并行化:任务数由.setNumTasks()决定——如果不指定,则与parallelism_hint(设置执行器数)相同。
  • 关于部署:Nimbus 从 ZK 获取集群配置,但 ZK 决定在哪里 运行 一个任务 -- Nimbus 有一个调度程序组件来做出这个决定(基于给定的拓扑、拓扑配置和集群配置)。

回答你的问题:

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