我正在本地机器上运行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()
始终返回元组的实现。我在这里误解了什么?
1条答案
按热度按时间mznpcxlj1#
在下列情况下也调用empty emit
如果未确认的消息数达到最大暂停时间。
如果执行器发送队列以及喷口的溢出缓冲区已满。