Apache storm 阿帕奇风暴及其战略行为

Apache storm 阿帕奇风暴及其战略行为,apache-storm,Apache Storm,我正在本地机器上运行Apache Storm。 然而,我看到了一种奇怪的行为。其中一个基准测试,即SOL(光速)测试,使用RandomMessageSpout生成随机元组作为源。下面是该喷嘴的nextTuple()代码: public void nextTuple(){ 最终字符串消息=消息[rand.nextInt(messages.length)]; 如果(已启用){ emit(新值(message)、messageCount); messageCount++; }否则{ emit(新值(消

我正在本地机器上运行Apache Storm。 然而,我看到了一种奇怪的行为。其中一个基准测试,即SOL(光速)测试,使用
RandomMessageSpout
生成随机元组作为源。下面是该喷嘴的
nextTuple()
代码:

public void nextTuple(){
最终字符串消息=消息[rand.nextInt(messages.length)];
如果(已启用){
emit(新值(message)、messageCount);
messageCount++;
}否则{
emit(新值(消息));
}
}
当我运行这个基准测试并使用Java分析器(在我的例子中是Yourkit)对其进行评测时。喷口线程根据
SleepSpoutWaitStrategy.emptyEmit()
显示睡眠间隔。按照我的理解,当
nextTuple()
没有要发出的元组时,就会调用此函数,因此,如屏幕截图所示,喷动线程会在可配置的时间内休眠


我不明白为什么这个函数会被调用,因为这个特定的
nextTuple()
实现总是返回一个元组。我在这里是什么

Empty emit在以下情况下也被调用

  • 如果未确认的消息数达到最大暂停时间
  • 如果执行器发送队列以及喷口的溢出缓冲区已满

您对等待策略的理解绝对正确。不知道为什么要调用这个方法…截图来自哪个应用程序?很有趣。让我检查一下,我想第一个可能是这种行为背后的原因。