Flink白话解析Watermark

发布时间 2023-05-24 16:08:24作者: 黑水滴

一、摘要

如果想使用Flink,Flink的Watermark是很难绕过去的概念。本文帮大家梳理Watermark概念

 

二、Watermark疑问

1、Flink应用的常见需求是什么

如公司运营一个官网,想统计下过去一分钟有多少用户访问官网。一分钟可以理解为Flink的窗口,在这一分钟统计有多少用户。

窗口的作用就是为了周期性获取数据,把传入的流数据根据时间切分成多个桶(buckets)

 

2、Flink使用窗口后,带来的问题

因为流式数据想要按照窗口做统计。因为网络延迟、乱序等原因可能导致客户端发送的某条数据延迟到达服务器。

而处理乱序的数据,则需要用到Watermark、allowedLateness、sideOutPut技术

Watermark:为了防止数据乱序的处理机制

allowedLateness:将窗口再延迟一段时间,比如等2分钟延迟的数据,2分钟到的可以继续计算

sideOutputLateData:最后兜底操作,窗口真正关闭后,延迟数据再过来,则输出到侧输出流。侧输出流数据可以在单独处理或丢弃

数据处理流程总结:Windows--> Watermark--> allowedLateness--> sideOutputLateData

数据处理流程描述:用Windows把流数据分块处理,用Watermark确定什么时候不再等待更早的数据/触发窗口进行计算,用allowLateNess 将窗口关闭时间再延迟一段时间。用sideOutPut 最后兜底把数据导出到其他地方。

3、