Flink学习28:水位线
创始人
2024-05-02 07:14:30
0

 1.前言

flink有3种时间,主要是事件时间和处理时间。

水位线主要解决,数据乱序到达或者延迟到达的问题

 

2.水位线原理

 即只有当水位线,越过窗口的结束时间,才会触发窗口计算。

窗口计算需要同时满足两个条件:

1.水位线,越过窗口的结束时间
2.窗口开始 和 窗口结束时间内,有数据

举个例子:

情况1:消息正常到达,没有延迟的情况

 情况二: 相较情况一,发生消息延迟(仍采用处理时间)

情况三:采用事件时间

迟到6秒的数据,无法分配到window1中,因为已经关闭

所以采用事件时间,还是处理时间,都无法保证窗口数据的正确。 

情况四:引入水位线

 只有水位线越过窗口结束时间,才关闭窗口,相当于让窗口延迟关闭。

3.水位线的设置方法

为了支持事件时间,flink必须知道时间戳。

分配时间戳和生成水位线,是同时生成的。

 

 

可以直接使用WatermarkStrategy下边的静态方法,生成水位线和分配时间戳。

也可以实现接口的两个create ** 方法来自定义,生成水位线和分配时间戳。

 

3.1 两种水位线设置

 

3.1.1 固定延迟水位线

  由于乱序流中需要等待迟到数据到齐,所以必须设置一个固定量的延迟时间(Fixed Amount of Lateness)。这时生成水位线的时间戳,就是当前数据流中最大的时间戳减去延迟的结果,相当于把表调慢,当前时钟会滞后于数据的最大时间戳。调用 WatermarkStrategy.forBoundedOutOfOrderness()方法就可以实现。

  这个方法需要传入一个 maxOutOfOrderness 参数,表示“最大乱序程度”,它表示数据流中乱序数据时间戳的最大差值;如果我们能确定乱序程度,那么设置对应时间长度的延迟,就可以等到所有的乱序数据了。

 eg:

 

3.1.2 单调递增水位线

对于单调递增的有序流,主要特点就是时间戳单调增长(Monotonously Increasing Timestamps),所以永远不会出现迟到数据的问题。这是周期性生成水位线的最简单的场景,直接调用WatermarkStrategy.forMonotonousTimestamps()方法就可以实现。简单来说,就是直接拿当前最大的时间戳作为水位线就可以了

 

3.2 自定义水位线(以后再补上)

 

相关内容

热门资讯

保存时出现了1个错误,导致这篇... 当保存文章时出现错误时,可以通过以下步骤解决问题:查看错误信息:查看错误提示信息可以帮助我们了解具体...
汇川伺服电机位置控制模式参数配... 1. 基本控制参数设置 1)设置位置控制模式   2)绝对值位置线性模...
不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
表格中数据未显示 当表格中的数据未显示时,可能是由于以下几个原因导致的:HTML代码问题:检查表格的HTML代码是否正...
本地主机上的图像未显示 问题描述:在本地主机上显示图像时,图像未能正常显示。解决方法:以下是一些可能的解决方法,具体取决于问...
不一致的条件格式 要解决不一致的条件格式问题,可以按照以下步骤进行:确定条件格式的规则:首先,需要明确条件格式的规则是...
表格列调整大小出现问题 问题描述:表格列调整大小出现问题,无法正常调整列宽。解决方法:检查表格的布局方式是否正确。确保表格使...
Android|无法访问或保存... 这个问题可能是由于权限设置不正确导致的。您需要在应用程序清单文件中添加以下代码来请求适当的权限:此外...
【NI Multisim 14...   目录 序言 一、工具栏 🍊1.“标准”工具栏 🍊 2.视图工具...
银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...