我一直在努力了解风暴架构,但我不确定我是否做到了这一点。我会尽可能准确地解释我认为的情况。请解释一下 - 如果 - 我错了,什么是对的。
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进程,在物理主节点上运行,它接收我的程序( Storm拓扑)接受螺栓和喷口并从中生成任务。如果 Bolt 应该并行化三次, Nimbus 会为它生成三个任务。 Nimbus 向 ZooKeeper JVM进程询问集群的配置,例如:运行这些任务的位置和 ZooKeeper JVM进程告诉 Nimbus 。为了做到这一点, ZooKeeper 与主管进行通信(后面会有什么)。 Nimbus 将任务分配给 Workers Nodes ,它们是物理节点。 工作节点由 Supervisors 管理,它们是JVM进程 - 对于一个工作节点只有一个 Supervisor 。 主管管理(启动,停止等)工作进程,它们是在工作节点上运行的JVM进程。每个工作节点可以运行多个工作进程。 工作进程是JVM进程。它们运行一个或多个称为 Executors 的线程。每个执行程序线程运行一个或多个任务,表示 Bolt 或 Spout 的一个或多个实例,{{ 3}}。
如果这一切都是真的,那就会引发问题:
修改:良好的额外资源:but those have to be of the same Bolt
答案 0 :(得分:1)
首先澄清一下(基本上你做对了)。
.setNumTasks()
确定 - 如果未指定,则与parallelism_hint
(设置执行者数量)相同。回答你的问题: