Flink-三个时间特性

2021-11-23  本文已影响0人  卡门001
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初始化流式运行环境时,就会设置流处理时间特性。这个设置很重要,它决定了数据流的行为方式。(例如:是否需要给事件分配时间戳),以及窗口操作应该使用什么样的时间类型。

上一篇下一篇

猜你喜欢

热点阅读