Apache Storm:限制生成的元组数量(在特定时间范围内)

时间:2015-12-03 17:47:56

标签: apache-storm

根据我的理解ack,使用与ISpout Javadoc建议的紧密循环相同的线程调用failnextTuple函数:

  

nextTuple,ack和fail都在一个紧凑的循环中被调用   spout任务中的线程。

假设我们有一个合成元组生成器,我们希望限制每秒喷出的元组数量。怎么能实现呢?睡觉()是个好主意吗?还有另一种方法吗?

1 个答案:

答案 0 :(得分:2)

睡眠可能不是最好的主意,因为它会阻止喷口处理进入的消息。见这里:Why should I not loop or block in Spout.nextTuple()

我只计算发出的元组并记住时间戳。如果超过每个时间单位的元组数并且时间单位没有通过,则只需从nextTuple()返回而不发出任何元组。通过时间单位后,将计数器重置为零,按时间单位前进时间戳,然后恢复发光。第四个。