在 3.1 节中讲解了 Flink 中的三种 Time 和其对应的使用场景,然后在 3.2 节中深入的讲解了 Flink 中窗口的机制以及 Flink 中自带的 Window 的实现原理和使用方法。如果在进行 Window 计算操作的时候,如果使用的时间是 Processing Time,那么在 Flink 消费数据的时候,它完全不需要关心的数据本身的时间,意思也就是说不需要关心数据到底是延迟数据还是乱序数据。因为 Processing Time 只是代表数据在 Flink 被处理时的时间,这个时间是顺序的。但是如果你使用的是 Event Time 的话,那么你就不得不面临着这么个问题:事件乱序 & 事件延迟。
下图表示选择 Event Time 与 Process Time 的实际效果图:

在理想的情况下,Event Time 和 Process Time 是相等的,数据发生的时间与数据处理的时间没有延迟,但是现实却仍然这么骨感,会因为各种各样的问题(网络的抖动、设备的故障、应用的异常等原因)从而导致如图中曲线一样,Process Time 总是会与 Event Time 有一些延迟。所谓乱序,其实是指 Flink 接收到的事件的先后顺序并不是严格的按照事件的 Event Time 顺
本文详细介绍了Flink中的Watermark概念,用于解决Event Time处理中的事件乱序和延迟问题。Watermark是一种衡量Event Time进展的机制,允许在处理窗口时设定数据最大延迟。Flink提供了Punctuated和Periodic两种Watermark设置方式,以及通过allowedLateness和sideOutputLateData处理延迟数据的策略。文章结合实例解释了Watermark的工作原理和配置方法,并探讨了在不同场景下的延迟数据处理策略。
订阅专栏 解锁全文
2046

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



