Flink1.10入门:时间机制简介

微信公众号:大数据开发运维架构

关注可了解更多大数据相关的资讯。问题或建议,请公众号留言;

如果您觉得“大数据开发运维架构”对你有帮助,欢迎转发朋友圈

从微信公众号拷贝过来,格式有些错乱,建议直接去公众号阅读


一、概述

    上篇文章介绍了Window窗口机制的相关知识,这里我们介绍下Flink的另外一个核心概念“Event Time机制”,本篇文章只介绍相关概念不讲实战,实战会结合Window窗口机制一起讲解。

 

二、Flink中的三种时间机制

    Flink在流处理程序中支持三种时间的概念,分别是EventTime、ProcessingTime、IngestionTime,Flink流式处理中,绝大部分的业务都会使用EventTime,一般只在EventTime无法使用时,考虑其他时间属性下面分别介绍下。

1.EventTime 事件时间

    EventTime是事件发生的时间,在进行Flink流处理程序之前,这个时间就已经能包含在了事件中,并且可以从每个记录中提取事件时间戳。

 

    在EventTime中,时间的进展取决于数据,而不是任何墙上的时钟。EventTime程序必须指定如何生成事件EventTime Watermarks,这是EventTime进展的信号机制。这种Watermarks机制将在下面的小节中进行描述。

    假设所有数据都已到达,事件时间操作将按照预期的方式运行,即使在处理无序或延迟的事件或重新处理历史数据时,也会产生正确和一致的结果。例如,每小时事件时间窗口将包含所有记录,这些记录携带属于该小时的事件时间戳,而与它们到达的顺序无关,也与它们被处理的时间无关。

 

2.ProcessingTime 处理时间

    ProcessingTime是指执行相应操作的机器的系统时间,ProcessingTime是Flink默认的时间概念,如需使用其他时间类型需要单独设置。

    当流程序在处理时间上运行时,所有基于时间的操作(如时间窗口)将使用运行各个operator的机器的系统时钟。每小时处理时间窗口将包括在系统时钟指示完整小时之间到达特定operator的所有记录。例如,如果一个应用程序在上午9:15开始运行,那么第一个每小时处理时间窗口将包括上午9:15到10:00之间处理的事件,下一个窗口将包括上午10:00到11:00之间处理的事件,依此类推。

3.IngestionTime 摄入时间

    IngestionTime是事件进入Flink的时间。在source operator中,每个记录以时间戳的形式获取源的当前时间,基于时间的操作(如时间窗口)引用该时间戳。

  IngestionTime概念上位于EventTime和ProcessingTime之间。与ProcessingTime相比,它稍微昂贵一些,但是提供了更可预测的结果。由于IngestionTime使用稳定的时间戳(在源处分配一次),对记录的不同窗口操作将引用相同的时间戳,而在ProcessingTime中,每个窗口操作人员可以将记录分配到不同的窗口(基于本地系统时钟和任何传输延迟)。

    与ProcessingTime相比,IngestionTime程序不能处理任何无序事件或延迟数据,但程序不必指定如何生成Watermarks,因为在内部,它自动进行时间戳分配和自动Watermarks生成。

    下面是Flink官网中对于时间标识的一张图:

 

4.设置时间特性

    通常,我们在Flink初始化流式运行环境时,就会设置流处理时间特性。这个设置很重要,它决定了数据流的行为方式。(例如:是否需要给事件分配时间戳),以及窗口操作应该使用什么样的时间类型;代码示例:

final StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();//Flink默认的是ProcessingTimeenv.setStreamTimeCharacteristic(TimeCharacteristic.ProcessingTime);// alternatively:// env.setStreamTimeCharacteristic(TimeCharacteristic.IngestionTime);// env.setStreamTimeCharacteristic(TimeCharacteristic.EventTime);

    至此,Flink三种时间机制讲解完毕,上面我们说了EventTime必须要指定如何生成事件时间Watermarks,下篇文章讲解,感谢关注!!!

   如果觉得我的文章能帮到您,请关注微信公众号“大数据开发运维架构”,并转发朋友圈,谢谢支持!

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陆继森

您的鼓励将是我们创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值