Flink 窗口延迟数据处理 AllowedLateness
Posted @SmartSi
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Flink 窗口延迟数据处理 AllowedLateness相关的知识,希望对你有一定的参考价值。
1. 什么是迟到数据
之前介绍过,Watermark 可以用来平衡结果的完整性和延迟。除非你选择一种非常保守的 Watermark 生成策略,等待足够长的时间确保应该到的数据已经全部到达(以高延迟为代价确保了数据的完整性),否则你的应用程序很有可能有迟到的数据。
所谓迟到数据是指数据记录元素到达算子后,本应该参与的计算已经执行完毕。在事件时间窗口算子中,如果数据记录元素到达算子时窗口分配器为其分配的窗口因为算子 Watermark 超过了窗口的结束时间而销毁,那么可以认为这条数据记录元素就是迟到数据(迟到数据在窗口计算时就不会被纳入窗口的统计范围内)。可以看出迟到数据本质是指某个 Watermark 之后到来的数据记录元素,并且其时间戳小于 Watermark。所以只有在事件时间语义下,讨论迟到数据的处理才是有意义的。
一般情况 Watermark 不应该把延迟设置得太大,否则流处理的实时性就会大大降低。因为 Watermark 的延迟主要是用来对付分布式网络传输导致的数据乱序,而网络传输的乱序程度一般并不会很大,大多集中在几毫秒至几百毫秒。所以实际应用中,我们往往会给 Watermark 设置一个’能够处理大多数乱序数据的最小延迟’,视需求一般设在毫秒到秒级。保证了低延迟,但是就有可能数据记录在 Watermark 之后到达,必须额外添加一些代码来处理延迟事件。DataStream API 提供了不同的选项来应对迟到的数据记录:
- 丢弃迟到数据记录
- 基于迟到数据更新计算结果
- 将迟到的数据记录输出到单独的数据流中
2. 迟到数据处理
2.1 丢弃迟到数据记录
处理迟到数据元素的最简单方式就是直接将其丢弃&#
以上是关于Flink 窗口延迟数据处理 AllowedLateness的主要内容,如果未能解决你的问题,请参考以下文章
flink 控制窗口行为(触发器移除器允许延迟将迟到的数据放入侧输出流)