Flink知识体系笔记五-time和timewindows和WaterMark延迟解决无序

我们先梳理一下time和timewindows的联系和区别:

触发器:

自定义触发器:

如果滑动窗口则触发器,则需要定义驱除器Evictort:

驱除器的逻辑:

 

滚动窗口join

滑动窗口join

会话窗口join,每隔1S GAP隔离窗口:

范围join

1、time 是一个时间的类型,不同处理情况下的时间。如:进入时间、事件时间、执行时间。

2、timewindows是一个时间的使用策略,比如多久上述时间多久间隔执行一次。分为滚动窗口、滑动窗口、会话窗口。

 

工作中常用Event Time 计算。

滑动窗口案例以下需求:

模拟测试的数据源,10S的整数倍执行,也就是模拟了一个10秒滚动窗口:

运行结果:

但上述案例是正常情况下,但是有一种情况数据源的数据顺序延迟的情况,出现情况【发送12数据,数据1到kafka分区1,数据2到kafka分区2,如果分区2卡了,数据顺序21】:

模拟乱序的代码:

运行结果,不是我们想要的顺序:

结果分析:

怎么解决??????waterMark给每个窗口增加延迟时间。主要解决kafka分区延迟造成的乱序问题,这个值设置一般是kafka分区的延迟。

举例如何使用WaterMark:

运行结果,使用WaterMark正常了

但超过延迟时间默认丢弃,设置延迟归集sideOutput策略如下:

计算函数sumProcessWindowFunction

 

以上增加并行度的案例,观察线程的情况:

运行结果:

 

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值