Flink详解系列之四--时间

在流处理场景中,Flink定义了三种时间类型:事件时间(反映事件实际发生的时间),处理时间(指定事件被处理的时间,即系统时间)和摄取时间(事件进入Flink系统的时间)。事件时间和处理时间是常用的概念,前者确保结果的确定性,后者适用于重视速度的场景。默认情况下,Flink使用处理时间,但可以通过设置StreamExecutionEnvironment切换到其他时间特性。
摘要由CSDN通过智能技术生成

在流处理场景中,处理的是持续到达且可能是无穷的事件流,时间在这样的应用中是最核心的要素。
Flink定义了三种时间类型:

  • 事件时间(Event Time) 事件时间是数据流中事件实际发生的真实时间,通常用时间戳来描述。它反映的是事件本身发生的时间,具有确定性,不依赖系统的时间,能还原事件之间发生的实际的顺序。
  • 处理时间(Processing Time) 处理时间是指定事件被算子处理的时间,是系统时间。
  • 摄取时间(Ingestion Time) 摄取时间是事件进入到Flink系统的时间,即该事件在数据源中被读取的时间。使用场景较少,与事件时间相比,它的价值不大,因为它无法提供确定的结果。

事件时间与处理时间是最常用的两个时间概念。事件时间能将处理速度与结果解耦,使结果不受实时数据乱序的影响。处理时间则主要用于更重视速度而非准确性的场景以及周期性的实时监控场景。

代码层面, Flink的时间是一个枚举类:

@PublicEvolving
public enum TimeCharacteristic {
    ProcessingTime,
    IngestionTime,
    EventTime
}

在实时处理应用创建会用到的执行环境类StreamExecutionEnvironment中,默认使用的是处理时间。

    /** The time characteristic that is used if none other is set. */
    private static final TimeCharacteristic DEFAULT_TIME_CHARACTERISTIC = TimeCharacteristic.ProcessingTime;
    /** The time characteristic used by the data streams. */
    private TimeCharacteristic timeCharacteristic = DEFAULT_TIME_CHARACTERISTIC;

如果不希望使用处理时间,而使用其他时间的话,需要在StreamExecutionEnvironment中手动设置:

@PublicEvolving
    public void setStreamTimeCharacteristic(TimeCharacteristic characteristic) {
        this.timeCharacteristic = Preconditions.checkNotNull(characteristic);
        if (characteristic == TimeCharacteristic.ProcessingTime) {
            getConfig().setAutoWatermarkInterval(0);
        } else {
            getConfig().setAutoWatermarkInterval(200);
        }
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值