apache-flink - Flink 水印策略
问题描述
我们正在构建一个流处理管道,以使用 Flink v1.11 和事件时间特性来处理 Kinesis 消息。在定义源水印策略时,在官方文档中,我遇到了两种开箱即用的水印策略;forBoundedOutOfOrderness 和 forMonotonousTimestamps。但是根据我对上述内容的理解,我认为这些不适合我的用例。以下是我的用例的详细信息:
来自输入流的数据:(包含每分钟时间戳的数据)
{11:00, Data1}
{11:01, Data2}
{11:00, Data3}
{11:00, Data4}
{11:01, Data5}
...
现在,我想在时间戳为 11:00 的第一个事件到达后正好 20 秒处理包含 [Data1, Data3, Data4] 的 11:00-11:01 的窗口(翻滚事件时间:1 分钟)。同样,11:01-11:02 包含 [Data2, Data5] 的下一个窗口需要在第一个时间戳为 11:01 的事件进来后 20s 执行。这种水印策略在 Flink 中是否可行?
解决方案
这是实现这一点的一种方法:
在该onEvent
方法中,跟踪迄今为止看到的最大时间戳。并且每当您更新此变量时,记录当前系统时间。
然后何时onPeriodicEmit
被调用(默认情况下,每 200 毫秒调用一次),如果自当前最大时间戳更新以来已经 20 秒,则发出等于当前最大时间戳加 1 秒的水印。
推荐阅读
- html - 如何使用 ::after 伪元素为单一样式设置两种字体颜色?
- image - CONVLSTM2D 从第一张图像预测第二张图像
- java - 是否有一个库来获取一个字符串,并根据它是否匹配一组字符串将其分类为一个类别?
- modelica - 如果条件发生变化,Modelica Simulation 会中断
- c++ - 是否可以为 perforce (p4api) 定义自定义分配器?
- javascript - React 使用 SVG 作为组件,但使用 SVG 而另一个则使用
- android - 使用 FragmentScenario 进行仪器测试
- git - 如何在我自己的服务器上创建分布式存储库
- github - 单用户 GitHub 存储库 - 如何保护主人,但允许我自己的 PR?
- javascript - 传单标记上的鼠标悬停给出错误 layer.setStyle is not a function