Flink 的时间类型

       对于流式数据处理,最大的特点就是数据具有时间的属性,Flink根据时间的产生位置分为三种类型,事件生成时间(Event Time)、事件接入时间(Ingestion Time)、事件处理时间(Processing Time)。用户可以根据具体业务灵活选择时间类型。

    1、事件时间(Event Time):

        事件时间是每个独立事件在产生它的设备上发生的时间,这个时间在事件进入Flink之前就已经嵌入到事件中,时间顺序取决于事件产生的地方,和下游数据处理系统的时间无关。

    2、接入时间(Ingestion Time)

        接入时间是数据进入Flink系统的时间,接入时间依赖Source Operator 所在主机的系统时钟。因为接入时间在数据接入过程生成后,时间戳不在发生变化,和后续处理数据的Operator所在机器的时钟没有关系,所以不会因为某台机器时钟不同步或网络延迟而导致计算结果不准确的问题。相比于Event Time,Ingestion Time 不能处理乱序事件,因此不用生成对应的Watermarks.

    3、处理时间(Processing Time)

        处理时间是指数据在操作算子计算过程中获取到的所在主机。当用户选择使用Processing Time 时,所有和时间相关的计算算子,例如Windows计算,在当前的任务中所有算子将直接使用其所在主机的系统时间。基于Processing Time 时间概念,Flink 的程序性能相对较高,延迟也比较低,对接入到系统中的数据时间相关的计算完全交给算子内部决定。虽然性能和易用性上有优势,但在处理数据乱序时,Processing Time 不是最优的选择,数据本身不乱序,如果每台机器本身的时钟不同步也会导致数据处理过程中出现数据乱序,Processing Time 适用于时间计算精度不是特别高的计算场景。

    4、时间概念的指定

        在Flink 中默认情况下使用Processing Time ,如果想用其它的时间类型,则在创建StreamExecutionEnvironment 中调用setStreamTimeCharacteristic()设定时间概念。

var env = StreamExecutionEnvironment.getExecutionEnvironment()//在系统中指定EventTimeenv.setStreamTimeCharacteristic(TimeCharacteristic.EventTime);

博主的微信公众号,不定期发布技术文章,喜欢的可以关注一下哈

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值