【问题标题】:Apache Storm: Limit the number of tuples produced (in a certain time frame)Apache Storm:限制生成的元组数量(在特定时间范围内)
【发布时间】:2016-03-21 18:04:40
【问题描述】:

据我了解,ackfailnextTuple 函数是在 ISpout Javadoc 建议的紧密循环中使用同一线程调用的:

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

假设我们有一个合成元组生成器,我们想要限制每秒由 spout 发出的元组数量。怎样才能做到这一点?放一个 sleep() 是个好主意吗?有替代方法吗?

【问题讨论】:

    标签: apache-storm


    【解决方案1】:

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

    我只会计算发出的元组并记住一个时间戳。如果超过了每个时间单位的元组数量并且时间单位没有过去,则从nextTuple()返回而不发出任何元组。当时间单位过去时,将计数器重置为零,将时间戳提前时间单位,然后继续发射。所以第四。

    【讨论】:

    • 是的,这就是我认为睡觉不是一个好主意的原因。谢谢你的建议:)
    • 刚刚扩展了我的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-04
    • 1970-01-01
    • 2023-03-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多