了解风暴架构
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 Nodes 和 Worker Processes.
我认为是真实的
游戏中的实体
- 主节点 = 管理服务器
- 工作节点 = 从节点
- Nimbus JVM 进程,运行在主节点上
- ZooKeeper JVM 进程,运行在 ZooKeeper 节点上
- Supervisor JVM 进程,运行在 Worker 节点上
- 工作进程 (JVM),运行在工作节点上
- Executor线程,运行 by Worker Process
- Task(Bolts 和 Spouts 的实例),由 执行者
工作原理
Nimbus 是一个 JVM 进程,运行在物理 主节点 上运行,接收我的程序(Storm 拓扑) 采用 Bolts 和 Spouts 并从中生成 tasks。如果 Bolt 应该被并行化三次,那么 Nimbus 会为它生成三个 tasks。 Nimbus 向 ZooKeeper JVM 进程询问集群的配置,例如运行 那些 任务 和 ZooKeeper JVM 进程告诉 Nimbus。为了做到这一点,ZooKeeper 与 Supervisors 进行通信(它们稍后会出现)。 Nimbus 将任务分发到 Workers Nodes,它们是物理节点。 Worker Nodes 由 Supervisors 管理,它们是 JVM 进程 - 恰好一个 Supervisor 对一个 工作节点。 主管 管理(启动、停止等)工作进程,它们是 运行 在 [=31= 上的 JVM 进程]工作节点。每个 Worker Node 可以有多个 Worker Processes 运行ning。 工作进程 是 JVM 进程。他们 运行 一个或多个线程称为 Executors。每个 Executor Thread 运行s 一个或多个 Tasks,意味着 Bolt[=108] 的一个或多个实例=] 或 Spout、but those have to be of the same Bolt。
如果这一切都是真的,那么问题来了:
- 在一个 Worker Node 上有多个 Worker Processes 运行 有什么意义 - 毕竟一个进程可以使用多个处理器内核,对吗?
- 一个 Executor 线程拥有多个 Tasks 运行 有什么意义? 螺栓/喷口?一个线程在一个处理器核心上只有 运行,所以多个 Bolt/Spout 必须 运行 一个接一个并且不能并行化。 运行 在 Storm 拓扑中无限期地存在 - 在 [=31] 中具有相同 Bolt/Spout 的两个实例有什么意义=]Exectuor线程?
编辑: 很好的附加资源: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
我一直在努力理解风暴架构,但我不确定我是否理解正确。我会尽量准确地解释我认为的情况。请解释什么 - 如果 - 我错了,什么是对的。
初步想法:工人
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 Nodes 和 Worker Processes.
我认为是真实的
游戏中的实体
- 主节点 = 管理服务器
- 工作节点 = 从节点
- Nimbus JVM 进程,运行在主节点上
- ZooKeeper JVM 进程,运行在 ZooKeeper 节点上
- Supervisor JVM 进程,运行在 Worker 节点上
- 工作进程 (JVM),运行在工作节点上
- Executor线程,运行 by Worker Process
- Task(Bolts 和 Spouts 的实例),由 执行者
工作原理
Nimbus 是一个 JVM 进程,运行在物理 主节点 上运行,接收我的程序(Storm 拓扑) 采用 Bolts 和 Spouts 并从中生成 tasks。如果 Bolt 应该被并行化三次,那么 Nimbus 会为它生成三个 tasks。 Nimbus 向 ZooKeeper JVM 进程询问集群的配置,例如运行 那些 任务 和 ZooKeeper JVM 进程告诉 Nimbus。为了做到这一点,ZooKeeper 与 Supervisors 进行通信(它们稍后会出现)。 Nimbus 将任务分发到 Workers Nodes,它们是物理节点。 Worker Nodes 由 Supervisors 管理,它们是 JVM 进程 - 恰好一个 Supervisor 对一个 工作节点。 主管 管理(启动、停止等)工作进程,它们是 运行 在 [=31= 上的 JVM 进程]工作节点。每个 Worker Node 可以有多个 Worker Processes 运行ning。 工作进程 是 JVM 进程。他们 运行 一个或多个线程称为 Executors。每个 Executor Thread 运行s 一个或多个 Tasks,意味着 Bolt[=108] 的一个或多个实例=] 或 Spout、but those have to be of the same Bolt。
如果这一切都是真的,那么问题来了:
- 在一个 Worker Node 上有多个 Worker Processes 运行 有什么意义 - 毕竟一个进程可以使用多个处理器内核,对吗?
- 一个 Executor 线程拥有多个 Tasks 运行 有什么意义? 螺栓/喷口?一个线程在一个处理器核心上只有 运行,所以多个 Bolt/Spout 必须 运行 一个接一个并且不能并行化。 运行 在 Storm 拓扑中无限期地存在 - 在 [=31] 中具有相同 Bolt/Spout 的两个实例有什么意义=]Exectuor线程?
编辑: 很好的附加资源: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