下面我引用这篇文章:Understanding the Parallelism of a Storm Topology作者:Michael G. Noll
在我看来,一个工作进程可以托管任意数量的执行器(线程)来运行任意数量的任务(拓扑组件的实例)。为什么我应该为每个集群节点配置一个以上的工作程序?
我看到的唯一原因是工作人员最多只能运行一个拓扑的子集。因此,如果我想在同一个集群上运行多个拓扑,我需要为每个集群节点配置与要运行的拓扑数量相同的工作线程数。
(例如:这是因为我希望在某些集群节点失败的情况下保持灵活性。例如,如果只剩下一个集群节点,我需要至少与在该集群上运行的拓扑一样多的工作进程,以保持所有拓扑运行.)
还有其他原因吗?特别是,如果只运行一种拓扑,是否有任何理由为每个集群节点配置一个以上的工作人员? (更好的故障安全性等)
最佳答案
平衡每个节点的主管守护程序的成本,以及工作程序崩溃的影响风险。如果您有一个大型的单体 JVM,那么一次崩溃会影响该 worker 中运行的所有内容,并且您的 worker 的不良行为部分会影响更多的居民。但是通过每个节点有一个以上的 worker ,你可以让你的主管更有效率,现在有一个隔板模式,避免全有或全无的方法。
我提到的共享资源可能是你的,也可能是 Storm 的;每个 JVM 共享多个 Storm 架构,并且可能会产生争用问题。我特别指的是接收和发送线程,以及底层网络部分。记录 here .
关于parallel-processing - 在 Apache Storm 中每个集群节点配置多个 worker 的原因是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23760801/