代码之家  ›  专栏  ›  技术社区  ›  Tom

如何知道键控窗口处理将开始并已完成

  •  0
  • Tom  · 技术社区  · 5 年前

    我有一个键控窗口流处理应用程序( KeyStream.window.process ),窗口是15分钟翻滚的窗口。

    我想知道一个新的窗口处理何时开始,何时结束,这样我就可以利用这个机会来做一些清理/初始化工作 globally .

    对于每个窗口,在处理开始之前,我想做一些初始化工作,比如截断一个db表(这个操作应该只在一个地方发生,这是一个全局操作,不应该在process方法中完成)。

    当处理窗口结束时(所有流程操作员的任务都完成了),我想做一些其他的清理工作(同样,这是一个全局操作)。

    我想知道是否有可能在弗林克和如何做,谢谢!

    0 回复  |  直到 5 年前
        1
  •  0
  •   David Anderson    5 年前

    我想你可以用一个跟在窗口后面的操作符来完成这项工作,它以1的并行度运行。这个操作符需要检测一批新的结果何时开始从窗口到达,并且可以做需要做的事情来关闭数据库中的前一个窗口并在此时初始化新的窗口。它还可以实现 close() 在作业结束或关闭时执行所需的任何结束操作。

    此运算符需要保留一个托管状态,即当前窗口的某种标识符,以便它能够检测新窗口何时开始。来自窗口的结果将需要携带这个标识符——它可能只是窗口的开始或结束时间戳。

    根据这些要求,这个操作员可以是 RichFlatMapFunction KeyedProcessFunction . 你需要使用 键处理函数 如果你发现自己想用定时器来清理。