apache storm SleepGateway策略行为

m1m5dgzv  于 2021-06-21  发布在  Storm
关注(0)|答案(1)|浏览(277)

我正在本地机器上运行apachestorm基准测试。然而,我看到一个奇怪的行为。其中一个基准,即sol(光速)测试,使用 RandomMessageSpout 生成随机元组作为源。这是你的名字 nextTuple() 喷口代码:

public void nextTuple() {
    final String message = messages[rand.nextInt(messages.length)];
    if(ackEnabled) {
        collector.emit(new Values(message), messageCount);
        messageCount++;
    } else {
        collector.emit(new Values(message));
    }
}

当我运行这个基准测试并使用java profiler(在我的例子中是yourkit)分析它时。喷口线根据睡眠时间显示睡眠间隔 SleepSpoutWaitStrategy.emptyEmit() . 按照我的理解,这个函数在 nextTuple() 没有要发射的元组,因此喷口线程将休眠一段可配置的时间,如屏幕截图所示。

我不明白为什么这个函数会在这种特殊情况下被调用 nextTuple() 始终返回元组的实现。我在这里误解了什么?

mznpcxlj

mznpcxlj1#

在下列情况下也调用empty emit
如果未确认的消息数达到最大暂停时间。
如果执行器发送队列以及喷口的溢出缓冲区已满。

相关问题