Storm Bolt Executors的利用不平衡

时间:2016-02-22 14:58:20

标签: performance apache-storm

我正在运行此set of benchmarks的滚动计数基准。以下是相关的代码:

spout = new FileReadSpout(BenchmarkUtils.ifAckEnabled(config));

TopologyBuilder builder = new TopologyBuilder();

builder.setSpout(SPOUT_ID, spout, spoutNum);
builder.setBolt(SPLIT_ID, new WordCount.SplitSentence(), spBoltNum)
        .localOrShuffleGrouping(SPOUT_ID);
builder.setBolt(COUNTER_ID, new RollingCountBolt(windowLength, emitFreq), rcBoltNum)
        .fieldsGrouping(SPLIT_ID, new Fields(WordCount.SplitSentence.FIELDS));

我有一个三节点设置,共有96个核心spBoltNum = 6rcBoltNum = 6。在运行之后,我看到针对分裂螺栓的每个执行器报告的容量度量存在显着的不平衡。即使每个节点都有2个用于拆分螺栓的执行器。我看到以下容量数字:

对于

上的拆分螺栓执行器

节点1~0.95

节点2~0.7

节点3~0.25

我不明白这种利用率的不平衡,因为分裂螺栓的分组是localOrShuffleGrouping,我期望每个执行器报告的容量大致相等。我在这里缺少什么?

1 个答案:

答案 0 :(得分:1)

你的spoutNum是什么? A假设它是1,因为FileReaderSpout读取本地文件(如果我没有记错的话)。

当您的分离螺栓通过localOrShuffle连接到喷口时,某些实例将是FileReaderSpout的节点本地和一些远程。 localOrShuffle更喜欢发送到本地实例,并且仅在本地消费者过载的情况下通过网络发送。因此,您的本地拆分螺栓执行器获得的数据远远多于远程执行器。