风暴消息超时无法正常工作

时间:2019-05-15 07:54:46

标签: apache-storm

使用调试模式时,我发现了以下内容。 TOPOLOGY_MESSAGE_TIMEOUT_SECS设置为90s。从发送到收到失败消息,Spout不应超过90s,但是为什么日志中有135s?

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

1 个答案:

答案 0 :(得分:1)

消息超时不是硬性限制。消息可能需要多达2倍的超时时间才能真正超时。这是由于性能优化,我们有两个存储桶,而不是每秒使元组超时。创建元组后,将其放入存储区1。一旦超时,我们将所有存储区1元组旋转到存储区2中,并使所有存储区2元组失效。这样就可以保证元组至少可以完成整个消息超时,同时计算起来也很便宜。