风暴消息超时工作不正常

Storm message timeout works improperly

我在使用debug模式的时候发现如下。 TOPOLOGY_MESSAGE_TIMEOUT_SECS 设置为 90 秒。 Spout 从发送到收到失败消息不应超过 90 秒,但为什么日志中有 135 秒?

2019-05-14 16:53:12.037 o.a.s.s.CheckpointSpout Thread-13-$checkpointspout-executor[1 1] [DEBUG] Current state CheckPointState{txid=7, state=COMMITTING}, emitting txid 7, action COMMIT
2019-05-14 16:55:27.097 o.a.s.s.CheckpointSpout Thread-13-$checkpointspout-executor[1 1] [DEBUG] Got fail with msgid 7
2019-05-14 16:55:27.097 o.a.s.s.CheckpointSpout Thread-13-$checkpointspout-executor[1 1] [DEBUG] Checkpoint failed, will trigger recovery

消息超时不是硬性限制。消息可能需要 2 倍的超时时间才能实际超时。这是由于性能优化,我们有两个桶,而不是每秒超时元组。当一个元组被创建时,它被放入桶 1。一旦超时过去,我们将所有桶 1 的元组旋转到桶 2,并使所有桶 2 的元组失败。这让我们可以保证元组至少获得完整的消息超时来完成,同时计算成本也很低。