当前位置: 首页 > 知识库问答 >
问题:

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

南宫森
2023-03-14

我在工作中使用ProcessWindowFunction并保持StateValue。我的目标是将值保持在超过1个窗口的状态,这意味着状态不会在每个窗口的末尾被清除。我有两个问题:

  1. 我怎样才能清除状态?有没有设置触发器并用它来清除状态的选项?(当在ProcessFunction中使用状态时,我能够设置触发器以执行此清除,即使没有新事件)
  2. 有没有一种方法来构建一个单元测试来检查我的ProcessWindowFunction实现的行为(以及特定的状态)?

共有1个答案

邹昊
2023-03-14

>

Flink本身有很多测试,在您自己的应用程序中重用OneInputStreamOperatorTestHarness和TwoInputStreamOperatorTestHarness是合理的,但它们不是公共API的一部分,并且可能随时更改。此外,内部窗口测试似乎没有使用这些工具——而且我在Flink源代码中没有看到任何我在为此编写测试时想要利用的东西。

 类似资料:
  • 是否可以清除数据流中的当前水印? 一个月长的水印不允许延迟的示例输入: 通常,“2018年9月”的记录会因为时间太晚而被扔掉。当看到消息时,是否有方法以编程方式重置水印状态?

  • 我有一个用于处理TumblingEventTimeWindows,其中我使用状态存储在多个滚动窗口中保存一些值。我的问题是,这个状态存储没有在滚动窗口中保存,也就是说,如果我首先在windows[0,999]中存储一些东西,然后从windows[1000,1999]访问这个存储,那么这个存储是空的。我知道这里所述的全局状态和每个窗口状态。我要使用全局状态。我还尝试创建一个最低限度的工作示例来调查这

  • 我是Fink新手,希望计算流的键控总会话持续时间: 表示会话开始,而表示会话结束。预期输出应为事件到达时每个键控的总持续时间。因此,上述数据的样本输出为 在我的实现中,我使用了一个和一个全局的来跟踪 然而,在调试过程中,我无法得到我想要的。 每次调用时,globalstate都是新的对象,并且没有在上一个窗口中计算的任何数据。 因此,我想问 如何在ProcessWindowFunction中获取g

  • 这是我的代码。我的问题如下 > 以这种方式清除状态是否正确? 这是使用keyBy的正确方法吗? //有100万个storeId

  • 我正在K8上运行flink cluster,状态约为1TB。 我面临的问题之一是获取保存点并恢复作业。现在,这些更新有时是简单的代码更新,而不是并行性更改。但是获取保存点然后用旧状态恢复新作业的时间相当长。 是否有方法对作业进行就地更新,以使本地状态和作业ID不发生更改,从而避免执行保存点恢复所需的时间?

  • 我已经编写了使用数据集和数据流api的flink作业。我已经从相同的main()方法启动了两个程序,但是现在当我将作业提交给flink Dashboard时。只有数据集api程序正在运行,仪表板说作业完成,流没有被触发,flink仪表板也没有显示任何关于数据流执行的信息。但是当我从eclipse运行时,数据集和datastream api程序都在运行。有没有其他方法将作业提交给flink作业管理器