flink-19 flink之Time概念

本文介绍了Flink中流处理的三种时间概念:Event Time(事件生成时间)、Ingestion Time(事件接入时间)和Processing Time(事件处理时间),强调了它们各自的特性和应用场景。Event Time具有确定性但处理无序事件时性能受影响,Ingestion Time简单但无法处理无序数据,而Processing Time提供最佳性能但可能带来不确定性。文章还提到了设置时间类型的方法,并通过ProcessWindowFunction展示了如何实现时间确定。
摘要由CSDN通过智能技术生成

flink中Time的概念

对流失数据处理,最大的特点是数据上具有时间的属性特征
flink根据时间产生的位置不同,可以将时间区分为三种时间概念

  • Event Time(事件生成时间)
    • 事件产生的时间,它通常由事件中的时间戳描述
  • Ingestion time(事件接入时间)
    • 事件进入Flink程序的时间
  • Processing Time(事件处理时间)
    • 事件被处理时当前系统的时间

在这里插入图片描述

  • Flink在流处理程序中支持不同的时间概念。

EventTime

  • 1、事件生成时的时间,在进入Flink之前就已经存在,可以从event的字段中抽取
  • 2、必须指定watermarks(水位线)的生成方式
  • 3、优势:确定性,乱序、延时、或者数据重放等情况,都能给出正确的结果
  • 4、弱点:处理无序事件时性能和延迟受到影响

IngestTime

  • 1、事件进入flink的时间,即在source里获取的当前系统的时间,后续操作统一使用该时间。

  • 2、不需要指定watermarks的生成方式(自动生成)

  • 3、弱点:不能处理无序事件和延迟数据

ProcessingTime(默认时间)

  • 1、执行操作的机器的当前系统时间(每个算子都不一样)

  • 2、不需要流和机器之间的协调

  • 3、优势:最佳的性能和最低的延迟

  • 4、弱点:不确定性 ,容易受到各种因素影像(event产生的速度、到达flink的速度、在算子之间传输速度等),压根就不管顺序和延迟

三种时间的综合比较

  • 性能

    • ProcessingTime > IngestTime > EventTime
  • 延迟

    • ProcessingTime < IngestTime < EventTime
  • 确定性

    • EventTime > IngestTime > ProcessingTime

设置 Time 类型

可以你的流处理程序是以哪一种时间为标志的。

  • 在我们创建StreamExecutionEnvironment的时候可以设置Time类型,不设置Time类型,默认是ProcessingTime。
  • 如果设置Time类型为EventTime或者IngestTime,需要在创建StreamExecutionEnvironment中调用setStreamTimeCharacteristic() 方法指定。
val environment: StreamExecutionEnvironment = StreamExecutionEnvironment.getExecutionEnvironment

//不设置Time 类型,默认是processingTime。
environment.setStreamTimeCharacteristic(TimeCharacteristic.ProcessingTime);

//指定流处理程序以IngestionTime为准
//environment.setStreamTimeCharacteristic(TimeCharacteristic.IngestionTime);

//指定流处理程序以EventTime为准
//environment.setStreamTimeCharacteristic(TimeCharacteristic.EventTime);

示例:ProcessWindowFunction实现时间确定

  • 通过process实现处理时间的确定,包括数据时间、window时间等
import org.apache.commons.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值