状态到期时Flink触发

问题描述 投票:0回答:1

我有一个有趣的用例,我想用Flink测试。我有一个Message流,它是PASSFAIL。现在,如果消息是FAIL类型,我有一个下游ProcessFunction,它保存Message状态,然后将pause命令发送到依赖于此的所有内容。当我收到与之前收到的PASS相关联的FAIL消息(通过消息ID键入)时,我将resume命令发送到我之前暂停的所有内容。

现在我计划使用状态TTL使存储的FAIL状态到期并在一定超时后恢复所有内容,即使我没有收到具有相同消息ID的PASS消息。这可以单独用Flink完成,还是需要一些外部定时器来向我的程序发送超时消息?

为了让它在Flink工作,我想到了这样的事情:

对于每个Message,添加时间戳并将其传递给流程函数,该函数在发送之前一直等到current_ts - timestamp == timeout以恢复模块暂停的所有内容。有没有更好的方法,或者你们认为这样可以吗?

java apache-flink flink-streaming
1个回答
1
投票

似乎使用计时器使状态到期(通过在onTimer方法中调用state.clear())而不是使用状态TTL会更直接。相同的onTimer方法也可以安排事情同时恢复。

© www.soinside.com 2019 - 2024. All rights reserved.