Storm集群中执行器数量超过cpu/核数的影响



我最近开始使用Apache Storm。现在我的重点是对我的一个应用程序进行一些性能测试和调优(从NoSQL数据库中提取数据,格式化数据,并将其发布到JMS Queue中供请求者使用),以便一次处理更多的并行请求。我已经能够通过更改no来调整拓扑。的螺栓,MAX_SPENDING_SPOUT等,并使用一些滴答方法节流拓扑中的数据流。

我想知道当我们定义的并行度大于我们拥有的核数时会发生什么。在我的例子中,我有一个节点,一个工作人员拓扑,机器有32个核心。但是执行器的总数(对于所有的喷口和螺栓)= 60。所以我的问题是:

  1. 这个高数字真的有助于处理请求还是实际上降低了性能,因为我相信在螺栓任务之间会有更多的上下文切换来利用内核

  2. 如果我为一个Bolt定义了20个(只是随机选择)执行器,并且我的代码流从不需要使用Bolt,这会影响性能吗?storm是如何处理这种情况的?

这是一个非常普遍的问题,所以答案(一如既往)是:视情况而定。

如果您的负载很大,并且单个执行程序完全利用了一个核心,那么使用更多的执行程序不会给您带来任何吞吐量改进。如果有任何影响,它可能是负面的(也涉及到内部使用的队列的争用,所有执行器都需要从这些队列中读取和写入元组传输)。

如果你的加载是"小"的,没有充分利用你的cpu,这也很重要——你不会获得或失去任何东西——因为你的核心没有充分利用,你有一些剩余的头部空间。

此外,考虑到Storm在每个worker中跨越更多的线程。因此,如果您的执行器充分利用了您的硬件,那么这些线程也将受到影响。

总的来说,你不应该运行你的拓扑来完全利用核心,但要为小的"峰值"等留出空间。在操作中,80%的CPU利用率可能是一个不错的值。根据经验,每个内核一个执行器就可以了。

最新更新