Apache Storm:限制生成的元组数量(在特定时间范围内)
Apache Storm: Limit the number of tuples produced (in a certain time frame)
根据我的理解,ack
、fail
和 nextTuple
函数是在紧密循环中使用同一线程调用的,正如 ISpout Javadoc 所建议的:
nextTuple, ack, and fail are all called in a tight loop in a single
thread in the spout task.
假设我们有一个合成元组生成器,我们想要限制每秒由 spout 发出的元组数量。如何实现?放一个 sleep() 是个好主意吗?有替代方法吗?
睡眠可能不是最好的主意,因为它会阻止 spout 处理传入的 ack。看这里:
我只会计算发出的元组并记住时间戳。如果超出了每个时间单位的元组数,并且时间单位没有过去,则只从 nextTuple()
return 不发出任何元组。当时间单位过去时,将计数器重置为零,将时间戳提前时间单位,然后恢复发射。等等第四。
根据我的理解,ack
、fail
和 nextTuple
函数是在紧密循环中使用同一线程调用的,正如 ISpout Javadoc 所建议的:
nextTuple, ack, and fail are all called in a tight loop in a single thread in the spout task.
假设我们有一个合成元组生成器,我们想要限制每秒由 spout 发出的元组数量。如何实现?放一个 sleep() 是个好主意吗?有替代方法吗?
睡眠可能不是最好的主意,因为它会阻止 spout 处理传入的 ack。看这里:
我只会计算发出的元组并记住时间戳。如果超出了每个时间单位的元组数,并且时间单位没有过去,则只从 nextTuple()
return 不发出任何元组。当时间单位过去时,将计数器重置为零,将时间戳提前时间单位,然后恢复发射。等等第四。