← 返回首页
Flink中的Time
发表时间:2023-11-30 15:40:19
Flink中的Time

Flink中的Time。

1.Time

针对流数据中的Time(时间),可以分为以下3种。 1. Event Time:事件产生的时间,它通常由事件中的时间戳描述。 2. Ingestion time:事件进入Flink的时间。 3. Processing Time:事件被处理时当前系统的时间。

这几种时间的对应关系通过这个图可以很清晰的看出来。

2.Time案例分析

原始日志是这样的:

2026-01-01 10:00:01 INFO executor.Executor: Finished task in state 0.0

日志数据进入Flink的时间是:

2026-01-01 20:00:01

日志数据到达Window处理的时间是:

2026-01-01 20:00:02

如果我们想要统计每分钟内接口调用失败的错误日志个数,使用哪个时间才有意义? 因为数据有可能会出现延迟,如果使用 数据进入Flink的时间 或者 Window处理的时间,其实是没有意义的,这个时候需要使用原始日志中的时间才是有意义的,这个才是数据产生的时间。

默认情况下Flink在流处理中使用的时间是ProcessingTime。

查看源码:在类StreamExecutionEnvironment中。

private static final TimeCharacteristic DEFAULT_TIME_CHARACTERISTIC = TimeCharacteristic.ProcessingTime;

想要修改的话可以使用setStreamTimeCharacteristic(…)

env.setStreamTimeCharacteristic(TimeCharacteristic.EventTime)

env.setStreamTimeCharacteristic(TimeCharacteristic.IngestionTime)