Flink乱序数据处理过程解析

1.乱序事件产生的原因以及乱序事件处理的必要性

流数据流经source,再到operator,由于网络延迟等原因,导致乱序的产生(这里的乱序是指事件产生的时间EventTime和到达处理机制进行处理的顺序不一样),特别是使用kafka的话,多个分区的数据source之后无法保证有序。所以在进行window计算的时候,如果有涉及时间的,比如(前一小时的访问量),必须要有个机制来保证操作结果的相对准确性。

2.Flink保证事件事件和操作时间相对一致的机制

2.1.warterMark

在不添加EventTime,只有窗口操作的情况下,Flink实时性得到了最大的发挥,但是于此同时,操作结果也非常不准确,只要过来的数据有达到窗口的结束时间window_end_time的,将会马上触发窗口,那么在接收数据是乱序的情况下,将会导致此窗口的数据大部分的丢失

warter是用来定义延迟触发窗口操作的时间的,假设窗口时00:00~00:05,warter为1分钟,那么相当于将接收这个窗口中的数据的时间向后延长了1分钟,自然操作这些数据的时间也会延迟1分钟。这是为了形象的理解,实际上时warterMark倒退了1分钟,等到wartermark的时间真正达到和window_end_time时间相同时,才触发窗口。

2.2.allowedLateness

在添加warterark之后,保证了绝大多数数据的准确性,但是warterMark的时间也不能设置过长,因为flink框架的特点就是低延迟,设置过高不利于保证实时性。因此,我们一般会将warterMark设置在一个较小但是又能保证绝大多数数据都会被计算。那么剩下仍旧有少数数据没有在此事件内到达,但是我们没有在warterMark这段时间内接收到,allowedLateness是为了保证warter之后短时间内的数据可以被计算的,在window_end_time+watermark 至window_end_time+watermark+allowedLateness的属于此窗口的数据,只要来一次就会和window中的其它数据被计算一次,这样保证了短期内对计算结果的更新。

2.3.OutputLateData

window_end_time+watermark+allowedLateness之后的极少量数据,将会被放入OutputLateData进行处理,不会主动并入之前的计算结果进行计算。

如下,是刚才花了很久时间画出来的一张很丑的图。。。。。。。。。。。。。。。

Flink时间语义

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值