欢迎光临散文网 会员登陆 & 注册

Flink中,升序流水印的案例实现(附详细代码)

2023-08-22 11:08 作者:ingemar-  | 我要投稿

Watermark的使用情况

  • 本来有序的Stream中的 Watermark

如果数据元素的事件时间是有序的,Watermark 时间戳会随着数据元素的事件时间按顺序生成,此时水位线的变化和事件时间保持一致(因为既然是有序的时间,就不需要设置延迟了,那么t就是 0。所以 watermark=maxtime-0 = maxtime),也就是理想状态下的水位线。当 Watermark 时间大于 Windows 结束时间就会触发对 Windows 的数据计算,以此类推, 下一个 Window 也是一样。这种情况其实是乱序数据的一种特殊情况。

  • 乱序事件中的Watermark

现实情况下数据元素往往并不是按照其产生顺序接入到 Flink 系统中进行处理,而频繁出现乱序或迟到的情况,这种情况就需要使用 Watermarks 来应对。


有序流中的水印(升序)


升序流水印概念

事件是有序的(按照他们自己的时间戳来看),watermark是流中简单的周期性的标记。

升序的底层实现

底层调用的也是 乱序的 watermark生成器,只是 乱序程度 传了一个 0ms

watermark = maxTimestamp - outOfOrdernessMillis - 1

                  = maxTimestamp - 0ms -1 ms

                 => 事件时间 - 1ms

需求

从socket获取数据,来计算传感器水位信息

开发步骤

1.定义类 WaterSensor  String id; Long ts; Integer vc; 

2.创建流执行环境

3.获取socket文本数据

4.将字符串数据切分成 WaterSensor 对象数据

5.分配水印机制,单调递增

6.分配后的数据根据id进行分组

7.设置滚动事件时间窗口,时间为10秒

8.对开窗数据进行process

9.打印输出

10.执行流环境

参考代码


Flink中,升序流水印的案例实现(附详细代码)的评论 (共 条)

分享到微博请遵守国家法律