清除Flink作业的ProcessWindowFunction中使用的状态

时间:2018-12-06 17:02:58

标签: apache-flink

我在工作中使用ProcessWindowFunction并保持StateValue。 我的目标是将值保留在多个窗口中的状态中,这意味着不会在每个窗口结束时清除该状态。 我有两个问题:

  1. 如何清除状态?是否有设置触发器并将其用于清除状态的选项? (在ProcessFunction中使用状态时,即使没有新事件,我也可以设置触发器以执行此清除操作)
  2. 有没有一种方法可以构建单元测试来检查我的ProcessWindowFunction实现的行为(特别是状态)?

1 个答案:

答案 0 :(得分:0)

  1. ProcessWindowFunction有一个clear方法,当您创建的每个窗口状态都应清除时会调用该方法。如果使用windowState(docs),则应实现此方法。我不确定是否有清除过时密钥的globalState的方法。

  2. Flink本身具有大量测试,可以合理地在您自己的应用程序中重用OneInputStreamOperatorTestHarness和TwoIntputStreamOperatorTestHarness,但它们不是公共API的一部分,并且可能随时更改。而且,内部窗口测试似乎没有使用这些工具-如果我正在为此编写测试,则在Flink源文件中没有看到任何我想利用的东西。