对于流式数据处理,最大的特点是数据上具有时间的属性特征, Flink根据时间产生的位置不同,将时间区分为三种时间概念,分别为
事件生成时间( Event Time)
事件接入时间( Ingestion Time)
事件处理时间( Processing Time)
数据从终端产生,或者从系统中产生的过程中生成的时间为事件生成时间,当数据经过消息中间件传入到 Flink系统中,在 Datasource中接入的时候会生成事件接入时间,当数据在Flink系统中通过各个算子实例执行转换操作的过程中,算子实例所在系统的时间为数据处理时间。
Fink已经支持这三种类型时间概念,用户能够根据需要选择时间类型作为对流式数据的依据,这种情况极大地增强了对事件数据处理的灵活性和准确性。
1. 事件生成时间( Event Time)
事件生成时间是每个独立时间在产生他的设备上发生的时间,这个时间通常在事件进入Flink前就已经进入到事件当中了
2. 事件接入时间( Ingestion Time)
事件接入时间是数据进入Flink系统的时间,它主要依赖于其Source Operator所在主机的系统时钟。需要注意的一点是相比于其他两者,他是不能处理乱序事件,也就不用生成对应的Watermarks
3. 事件处理时间( Processing Time)
事件处理时间是指数据在操作算子计算过程中获取到的所在主机时间。在处理乱序事件时, 他不是最优的选择。Process Time主要用于时间计算精度要求不是特别高的计算场景,比如延时比较高的日志数据
4. 代码中更改时间类型
在Flink中默认情况下使用是Process Time时间概念,如果需要切换的话,可以使用以下代码进行切换
领取专属 10元无门槛券
私享最新 技术干货