状态过期时触发Flink

时间:2019-02-15 19:46:22

标签: java apache-flink flink-streaming

我有一个有趣的用例,我想用Flink进行测试。我有MessagePASS的{​​{1}}传入流。现在,如果消息的类型为FAIL,则我有一个下游FAIL,它保存ProcessFunction状态,然后向与此相关的所有事物发送Message命令。当我收到与先前收到的pause相关的PASS消息(按消息ID键入)时,我向先前暂停的所有内容发送FAIL命令。

现在,我计划使用状态TTL使存储的resume状态失效,并在特定的超时后恢复所有内容,即使我没有收到具有相同消息ID的FAIL消息也是如此。可以单独使用Flink完成此操作,还是需要一些外部计时器将超时消息发送到程序?

我想让它在Flink中工作是这样的:

对于每个PASS,添加时间戳并将其传递给流程函数,该函数等待Message继续发送,以恢复模块暂停的所有内容。有没有更好的方法,或者你们认为这还好吗?

1 个答案:

答案 0 :(得分:1)

似乎使用计时器使状态过期(通过在onTimer方法中调用state.clear())比使用状态TTL更简单。相同的onTimer方法还可以安排事物同时恢复。