Flink-三个时间特性
2021-11-23 本文已影响0人
卡门001
Flink三段论涉及的时间
三个时间段
- EventTime - 数据产生时间,嵌在event中可提取,后续统计分析的基准点。
与运算过程长短无关,执行结果确定,可处理乱序、延迟等问题。 - Windows Processing Time - 进入Flink运算的时间,与算子的执行时间有关系.
性能好、延迟低,不确定性。 - IngestionTime - Event/数据对接入到Flink的时间
EventTime
EventTime是事件发生的时间。它通常由事件中的时间戳描述,例如采集的日志数据中,每一条日志都会记录自己的生成时间,Flink通过时间戳分配器访问事件时间戳。EventTime作为后续统计分析的基准点和作业执行的机器时间是没有关系的。
执行结要确定,可处理乱序,延迟数据等问题。Flink的流式处理中,绝大部分的业务都会使用EventTime,一般只在EventTime无法使用时,才会被迫使用ProcessingTime或者IngestionTime。
默认情况下,Flink框架中处理的时间语义为ProcessingTime,如果要使用EventTime,那么需要引入EventTime的时间属性。
ProcessingTime
ProcessingTime是指执行相应操作的机器的系统时间,ProcessingTime是Flink默认的时间概念,如需使用其他时间类型需要单独设置。性能好、延迟低,但在分布式系统中的不确定性无法对精度要求高的算子提供支持。
IngestionTime
IngestionTime是事件进入Flink的时间。在源算子处,每个记录将源的当前时间作为时间戳,并且基于时间的算子操作(如时间窗口)引用该时间戳。IngestionTime位于EventTime与ProcessingTime 之间。
使用IngestionTime时,程序不须指定如何生成Watermarks,但程序无法处理任何无序事件或延迟数据。比ProcessingTime 稍贵一些,但更精确。
总结
我们在Flink初始化流式运行环境时,就会设置流处理时间特性。这个设置很重要,它决定了数据流的行为方式。(例如:是否需要给事件分配时间戳),以及窗口操作应该使用什么样的时间类型。