风暴如何执行组件内存约束

时间:2019-04-03 17:43:35

标签: apache-storm

Storm可以选择使用 setMemoryLoad 函数配置每个组件的内存大小(螺栓/喷口)。由于执行器/任务都在同一个JVM中,工作进程如何对每个执行器/任务强制执行此约束?

1 个答案:

答案 0 :(得分:0)

我认为您误解了setMemoryLoad的用途。

SetMemoryLoad和类似方法(例如setCPULoad)无法确定实际上为组件分配了多少内存或CPU。它们是资源意识调度程序https://storm.apache.org/releases/2.0.0-SNAPSHOT/Resource_Aware_Scheduler_overview.html的提示。

您可以配置每个主管上有多少内存/ cpu,并且资源感知调度程序会使用该信息,以及您在组件上设置的内存/ cpu负载,尝试以某种方式在各个主管之间分配组件那讲得通。如果例如您想在整个群集中平均分配重型组件,或者您的主管是异构的(也就是说,您有一些弱机器和一些强机器,并且您不希望Storm在弱机器上运行非常繁忙的组件)。 / p>

我相信Storm确实可以执行您指定的CPU /内存限制,但是您必须为该http://storm.apache.org/releases/2.0.0-SNAPSHOT/cgroups_in_storm.html启用cgroup。我对代码的那部分并不十分熟悉,但是它允许您为每个辅助JVM设置统一限制,或者尝试根据资源感知调度程序的分配动态地设置限制。

正如我所说,我对cgroups的支持并不熟悉,所以这可能是错误的,但是我认为Storm可以在启动JVM时为辅助JVM设置cgroup限制。因此,例如,如果RAS为您的工作人员分配了一个boltA实例和一个boltB实例,则整个工作人员的限制合计为512 + 1024兆。