首页 > 解决方案 > 如何为在 Heron 中运行的 Storm 拓扑设置组件的资源需求?

问题描述

最近,我想将 Storm 拓扑迁移到 Heron。但它存在一些问题。
在 Heron 拓扑中,我可以设置 和 的资源componentscontainers例如:

conf.setComponentRam("spout", ByteAmount.fromMegabytes(512));
conf.setComponentRam("split", ByteAmount.fromMegabytes(512));
conf.setComponentRam("count", ByteAmount.fromMegabytes(512));
conf.setContainerDiskRequested(ByteAmount.fromGigabytes(3));
conf.setContainerRamRequested(ByteAmount.fromGigabytes(3));
conf.setContainerCpuRequested(2);

但是在 Storm 拓扑中,我无法设置这些资源需求。因此,当我尝试使用在 Heron 中运行 Storm 拓扑时RoundRobin Packing,它将使用default resource settings以下内容:

DEFAULT_DISK_PADDING_PER_CONTAINER = ByteAmount.fromGigabytes(12);
DEFAULT_CPU_PADDING_PER_CONTAINER = 1;
MIN_RAM_PER_INSTANCE = ByteAmount.fromMegabytes(192);
DEFAULT_RAM_PADDING_PER_CONTAINER = ByteAmount.fromGigabytes(2);

但问题是:我的 Heron 集群中的 worker 节点并没有那么多RAM资源Disk。所以当提交 Storm 拓扑时,这个拓扑的状态会是pendingAurora,因为Insufficient: disk or ram.

我对Storm不是很熟悉,可以在Storm拓扑中设置组件的资源需求吗?如果不行,除了增加集群中工作节点的资源容量,还有没有其他办法解决这个问题?任何帮助都非常感谢。

标签: apache-stormheron

解决方案


首先,让我试着理解你的问题:你问的是如何在使用 RoundRobinPacking 资源打包算法时为拓扑中的每个组件设置 cpu/memory/disk 限制。

其次,如果我正确理解你的问题。那么答案只是你问题的第一部分。conf您可以使用heron 框架提供的对象设置这些限制。要记住的一些事情是:

  1. 您只能设置容器资源。在这种情况下,一个容器中的 spout/bolts 将平等地共享这些资源。
  2. 您可以为每种类型的 bolt/spout 设置资源。在这种情况下,每个容器使用的总资源是装入该容器的那些 spout/bolts 的总和。
  3. 您可以将以上两者结合起来。在这种情况下,未指定的 spouts/bolts 将共享剩余的资源。

第三,Heron 的底层架构与 Storm 有很大不同。我不认为 Storm 提供了如此细粒度的资源控制。Storm 没有这些配置。


推荐阅读