原文链接:https://blog.csdn.net/m0_49826240/article/details/117296559
结论:
先说结论吧:
Flink 使用 timeWindow,如何使用周级别的滚动窗口
不需要自定义窗口分配器!不需要自定义窗口分配器!
第一种:开始时间为周一 00:00:00,结束时间为 周日 23:59:59
.window(TumblingEventTimeWindows.of(Time.days(7), Time.hours(-80)));
第二种:开始时间为周天 00:00:00,结束时间为 周六 23:59:59
.window(TumblingEventTimeWindows.of(Time.days(7), Time.hours(-104)));
至于为什么,往下看。阅读源码来解释
数据需求
接到一个实时数据的需求,大致的内容就是实时统计每个店铺的一周GMV。
分析这个需求,明确的点:
1.周期长度为1周,也就是7天,7 x 24 个小时。
2.每个周期的开始时间:周一 00:00:00,结束时间:周日 00:00:00
按照日历中的划分,每周的开始是周日,结束是周六。这个我们不需要纠结这么多。
遇到的问题
这个需要可以用两种方式来做
1.使用 keyby-process,对商家ID做key by,然后在process中做每周的GMV统计即可。
2.使用 timeWindow,使用支付时间开窗,累计一周的时间。
此处我们主要探讨第二种方案。
本文提及的这个需求,更实用使用滚动窗口计算,下面这行代码就是平时实时的写法。
.window(TumblingEventTimeWindows.of(Time.days(7), Time.hours(-8)));
此时可以发现,Time.day() 已经是提供的最大时间单位了,并没有想要使用 Time.week()。那么使用 Time.day(7)呢?
行不行,试一下就知道了,做个小实验,读取端口 9910 数据,使用 TumblingEventTimeWindows.of(Time.days(7), Time.hours(-8))
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
env.setStreamTimeCharacteristic(T

本文详细介绍了如何在Flink中使用TumblingEventTimeWindows实现周级别的滚动窗口,通过设置时间偏移量避免自定义窗口分配器。通过分析源码,得出使用Time.days(7)和Time.hours(-80)或者Time.days(7)和Time.hours(-104)可以实现从周一或周日开始的周窗口。内容包括需求分析、问题探讨、解决方案以及源码解析。
最低0.47元/天 解锁文章
1362

被折叠的 条评论
为什么被折叠?



