storm如何强制组件内存约束

oymdgrw7  于 2021-06-24  发布在  Storm
关注(0)|答案(1)|浏览(230)

storm可以通过使用setmemoryload函数来配置每个组件(bolt/spout)的内存大小。既然所有的执行者/任务都在同一个jvm中,那么工作进程如何对每个执行者/任务实施此约束?

e0bqpujr

e0bqpujr1#

我想你误解了setmemoryload的作用。
setmemoryload和类似的方法(例如setcpuload)并不确定实际分配给组件的内存或cpu数量。它们是对资源感知调度程序的提示https://storm.apache.org/releases/2.0.0-snapshot/resource_aware_scheduler_overview.html.
您可以配置每个管理器上有多少内存/cpu可用,资源感知调度程序使用这些信息以及您在组件上设置的内存/cpu负载,尝试以合理的方式将组件分布到管理器中。如果您希望在集群中均匀地分布重组件,或者如果您的主管是异构的(即,您有一些较弱的计算机和一些较强的计算机,并且不希望storm在较弱的计算机上运行非常繁忙的组件),那么您可能需要这样做。
我相信storm确实有能力强制执行您指定的cpu/内存限制,但是您必须为此启用cgrouphttp://storm.apache.org/releases/2.0.0-snapshot/cgroups_in_storm.html. 我对这部分代码不是很熟悉,但它允许您为每个worker jvm设置一个固定限制,或者尝试根据资源感知调度程序的分配动态设置限制。
正如我所说,我不熟悉cgroups支持,所以这可能是错误的,但是我可以想象storm可以在引导一个工作jvm时为该jvm设置cgrouplimit。例如,如果ras将一个bolta示例和一个boltb示例分配给您的worker,那么整个worker将只有512+1024兆的组合限制。

相关问题