Parallel processing Storm集群中执行器多于cpu/内核的影响

Parallel processing Storm集群中执行器多于cpu/内核的影响,parallel-processing,apache-storm,Parallel Processing,Apache Storm,我最近开始使用ApacheStorm。现在,我重点关注我的一个应用程序的一些性能测试和调优(从NoSQL数据库提取数据,格式化数据,并发布到JMS队列供请求者使用),以便一次能够实现更多的并行请求处理。我已经能够根据改变螺栓数量、最大支出等来调整拓扑结构,并使用一些滴答的方法来限制拓扑结构中的数据流 我想知道当我们定义的并行度超过我们拥有的核数时会发生什么。在我的例子中,我有一个单节点、单工作拓扑,机器有32个核。但执行器总数(所有喷嘴和螺栓)=60。因此,我的问题是: 这个高数字真的有助于处理

我最近开始使用ApacheStorm。现在,我重点关注我的一个应用程序的一些性能测试和调优(从NoSQL数据库提取数据,格式化数据,并发布到JMS队列供请求者使用),以便一次能够实现更多的并行请求处理。我已经能够根据改变螺栓数量、最大支出等来调整拓扑结构,并使用一些滴答的方法来限制拓扑结构中的数据流

我想知道当我们定义的并行度超过我们拥有的核数时会发生什么。在我的例子中,我有一个单节点、单工作拓扑,机器有32个核。但执行器总数(所有喷嘴和螺栓)=60。因此,我的问题是:

  • 这个高数字真的有助于处理请求吗?还是实际上会降低性能,因为我相信在使用内核的bolt任务之间会有更多的上下文切换

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


  • 这是一个非常笼统的问题,所以答案是(一如既往):这要视情况而定

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

    如果您的负载“很小”,并且没有充分利用您的CPU,那么这也很重要——您不会获得或丢失任何东西——因为您的内核没有充分利用,您仍然有一些剩余的空间

    <> P>此外,考虑到风暴在每个工人中跨越了更多的螺纹。因此,如果您的执行器充分利用您的硬件,这些线程也将受到影响


    总的来说,无论如何,您不应该运行拓扑来完全利用核心,而是为小的“尖峰”等留出空间。在运行中,80%的CPU利用率可能是一个不错的值。根据经验,每个核心一个执行器应该是可以的。

    这是一个非常普遍的问题,所以答案是(一如既往):这取决于

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

    如果您的负载“很小”,并且没有充分利用您的CPU,那么这也很重要——您不会获得或丢失任何东西——因为您的内核没有充分利用,您仍然有一些剩余的空间

    <> P>此外,考虑到风暴在每个工人中跨越了更多的螺纹。因此,如果您的执行器充分利用您的硬件,这些线程也将受到影响

    总的来说,无论如何,您不应该运行拓扑来完全利用核心,而是为小的“尖峰”等留出空间。在运行中,80%的CPU利用率可能是一个不错的值。根据经验,每个内核一个执行器应该是可以的