在下面,我引用了这篇文章:理解风暴拓扑的并行性,作者:Michael G. Noll
在我看来,一个工作进程可以承载任意数量的执行器(线程)来运行任意数量的任务(拓扑组件的实例)。为什么我应该为每个集群节点配置多个worker ?
我看到的唯一原因是一个worker最多只能运行一个拓扑的子集。因此,如果希望在同一集群上运行多个拓扑,则需要为每个集群节点配置与要运行的拓扑数量相同数量的工作人员。(示例:这是因为我希望在某些集群节点失败的情况下保持灵活性。例如,如果只剩下一个集群节点,我需要至少与该集群上运行的拓扑一样多的工作进程,以保持所有拓扑的运行。
还有其他原因吗?特别是,如果只运行一个拓扑,是否有理由为每个集群节点配置多个worker ?(更好的故障安全等)
平衡每个节点管理程序守护进程的成本,以及工作线程崩溃的影响风险。如果您有一个大型的单片worker JVM,那么一次崩溃会影响在该worker中运行的所有内容,并且worker的不良行为部分会影响更多的居民。但是,通过在每个节点上有多个工作人员,您可以使您的主管更高效,并且现在有了一个隔板模式,避免了全有或全无的方法。
我所指的共享资源可能是你的,也可能是storm的;storm架构的几个部分在每个JVM上共享,这可能会产生争用问题。我指的是接收和发送线程,特别是底层网络块。记录在这里。