在下文中,我参考了这篇文章:Michael G. Noll的Understanding the Parallelism of a Storm Topology
在我看来,工作进程可以托管任意数量的执行程序(线程)来运行任意数量的任务(拓扑组件的实例)。为什么我应该为每个群集节点配置多个工作线程?
我看到的唯一原因是工作者只能运行最多一个拓扑的子集。因此,如果我想在同一个集群上运行多个拓扑,我需要为每个集群节点配置与要运行的拓扑数相同的工作数。 (示例:这是因为我希望在某些群集节点发生故障时保持灵活性。例如,如果只剩下一个群集节点,我至少需要与该群集上运行的拓扑一样多的工作进程才能保持所有拓扑都在运行。)
还有其他原因吗?特别是,如果只运行一个拓扑,是否有任何理由为每个群集节点配置多个工作线程? (更好的失败安全等)
答案 0 :(得分:1)
平衡每个节点的supervisor守护程序的成本以及工作程序崩溃的影响风险。如果你有一个庞大的,整体的工作者JVM,一次崩溃会影响那个工人中运行的一切,以及你工人的不良行为部分会影响更多的居民。但是,通过每个节点拥有多个工作人员,您可以提高主管的效率,并且现在有一定程度的隔离模式,不受全有或全无的影响。
我所指的共享资源可能是您的,也可能是暴风雨;每个JVM共享几个风暴的架构,可能会产生争用问题。我特别指的是接收和发送线程以及底层网络部分。记录here。