我有一个有趣的用例,我想用Flink进行测试。我有Message
或PASS
的{{1}}传入流。现在,如果消息的类型为FAIL
,则我有一个下游FAIL
,它保存ProcessFunction
状态,然后向与此相关的所有事物发送Message
命令。当我收到与先前收到的pause
相关的PASS
消息(按消息ID键入)时,我向先前暂停的所有内容发送FAIL
命令。
现在,我计划使用状态TTL使存储的resume
状态失效,并在特定的超时后恢复所有内容,即使我没有收到具有相同消息ID的FAIL
消息也是如此。可以单独使用Flink完成此操作,还是需要一些外部计时器将超时消息发送到程序?
我想让它在Flink中工作是这样的:
对于每个PASS
,添加时间戳并将其传递给流程函数,该函数等待Message
继续发送,以恢复模块暂停的所有内容。有没有更好的方法,或者你们认为这还好吗?
答案 0 :(得分:1)
似乎使用计时器使状态过期(通过在onTimer方法中调用state.clear())比使用状态TTL更简单。相同的onTimer方法还可以安排事物同时恢复。