在Apache Storm中为每个群集节点配置多个工作线的原因是什么?

sem*_*ema 5 parallel-processing stream apache-storm

在下文中,我将参考这篇文章:Michael G. Noll 理解风暴拓扑的并行性

在我看来,工作进程可以托管任意数量的执行程序(线程)来运行任意数量的任务(拓扑组件的实例).为什么我应该为每个群集节点配置多个工作线程?

我看到的唯一原因是工作者只能运行最多一个拓扑的子集.因此,如果我想在同一个集群上运行多个拓扑,我需要为每个集群节点配置与要运行的拓扑数相同的工作数. (示例:这是因为我希望在某些群集节点发生故障时保持灵活性.例如,如果只剩下一个群集节点,我至少需要与该群集上运行的拓扑一样多的工作进程,以保持所有拓扑运行.)

还有其他原因吗?特别是,如果只运行一个拓扑,是否有任何理由为每个群集节点配置多个工作线程?(更好的失败安全等)

dan*_*mer 2

平衡每个节点的 Supervisor 守护进程的成本以及工作线程崩溃的影响风险。如果您有一个大型的整体工作线程 JVM,一次崩溃会影响该工作线程中运行的所有内容,并且工作线程的不良行为部分会影响更多居民。但是,通过每个节点拥有多个工作人员,您可以提高主管的效率,并且现在在某种程度上具有舱壁模式,避免了“全有或全无”的方法。

我所指的共享资源可以是你的,也可以是storm的;Storm 架构的多个部分是每个 JVM 共享的,并且可能会产生争用问题。我特别指的是接收和发送线程以及底层网络部分。记录在这里