本文主要是介绍二十四:Flink 中 watermark 的定义和使用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
我们提过窗口和时间的概念,Flink 框架支持事件时间、摄入时间和处理时间三种。Watermark(水印)的出现是用于处理数据从 Source 产生,再到转换和输出,在这个过程中由于网络和反压的原因导致了消息乱序问题。
那么在实际的开发过程中,如何正确地使用 Watermark 呢?
使用 Watermark 必知必会
Watermark 和事件时间
事件时间(Event Time)是数据产生的时间,这个时间一般在数据中自带,由消息的生产者生成。例如,我们的上游是 Kafka 消息,那么每个生成的消息中自带一个时间戳代表该条数据的产生时间,这个时间是固定的,从数据的诞生开始就一直携带。所以,我们在处理消息乱序的情况时,会用 EventTime 和 Watermark 进行配合使用。
我们只需要一行代码,就可以在代码中指定 Flink 系统使用的时间类型为 EventTime:
env.setStreamTimeCharacteristic(TimeCharacteristic.EventTime);
那么为什么不用处理时间(Processing Time)和摄入时间(Ingestion Time)呢?
处理时间(Processing Time)指的是数据被 Flink 框架处理时机器的系统时间,这个时间本身存在不确定性,比如因为网络延迟等原因。
摄入时间(Ingestion Time)理论上处于事件时间(Event Time)和处理时间(Processing Time)之间,可以用
这篇关于二十四:Flink 中 watermark 的定义和使用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!