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

问题描述 投票:0回答:1

Storm可以选择使用setMemoryLoad函数配置每个组件的内存大小(bolt / spout)。工作进程如何为每个执行程序/任务强制执行此约束,因为它们都在同一个JVM中?

apache-storm
1个回答
0
投票

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

SetMemoryLoad和类似的方法(例如setCPULoad)不确定实际分配给组件的内存或CPU数量。它们是资源感知调度程序https://storm.apache.org/releases/2.0.0-SNAPSHOT/Resource_Aware_Scheduler_overview.html的提示。

您可以配置每个主管上可用的内存/ CPU数量,并且资源感知调度程序使用该信息以及您在组件上设置的内存/ CPU负载,尝试以有意义的方式在您的主管上分发组件。你可能想要这个,例如您希望在整个群集中均匀分布繁重的组件,或者如果您的主管是异构的(也就是说,您有一些弱机器和一些强大的机器,并且您不希望Storm在弱机器上运行非常繁忙的组件)。

我相信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的一个实例分配给您的worker,则整个worker将只有512 + 1024 megs的组合限制。

© www.soinside.com 2019 - 2024. All rights reserved.