一、介绍

Flink DataStream程序的第一部分通常设置基本时间特性。

该设置定义了数据流源的行为方式(例如,它们是否将分配时间戳),以及像KeyedStream.timeWindow(Time.seconds(30))这样的窗口操作应该使用什么时间概念。

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

ProcessingTime

默认,无需指定

是指执行相应操作的机器的系统时间
当流处理程序基于处理时间运行时,所有基于时间的操作(如时间窗口)将使用运行相应运算符的机器的系统时钟。 每小时处理时间窗口将包括在系统时钟指示整个小时之间到达特定运算符的所有记录。 例如,如果应用程序在上午9:15开始运行,则第一个每小时处理时间窗口将包括在上午9:15到10:00之间处理的事件,下一个窗口将包括在上午10:00到11:00之间处理的事件,以此类推。
处理时间是最简单的时间概念,不需要流和机器之间的协调。 它提供最佳性能和最低延迟。 但是,在分布式和异步环境中,处理时间不提供确定性,因为它容易受到记录到达系统的速度(例如从消息队列),记录在系统内的运算符之间流动的速度的影响,以及停电(计划或其他)。

EventTime

事件时间,是每个事件在其生产设备上发生的时间。需要指定:

StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
env.setStreamTimeCharacteristic(TimeCharacteristic.EventTime);

将时间处理为eventtime:

DataStream<Tuple4<String, String, Map<String, String>, Double>> timestampStream = stream2.assignTimestampsAndWatermarks(new BoundedOutOfOrdernessTimestampExtractor<Tuple4<String, String, Map<String, String>, Double>>(Time.minutes(1)) {private static final long serialVersionUID = 1L;@Overridepublic long extractTimestamp(Tuple4<String, String, Map<String, String>, Double> stringMapTuple3) {return Long.parseLong(String.valueOf(stringMapTuple3.f2.get("timestamp"))) * 1000;}
});

通俗理解就是Flink接收的数据中某个字段指定的时间,如接收的Map对象,里面有个eventtime字段或者有个createdate字段;

由于系统不知道具体哪一个是表示EventTime,所以需要业务写代码的时候指定好。

Flink中用于衡量事件时间进度的机制是水印。 水印作为数据流的一部分流动并带有时间戳t。 Watermark(t)声明事件时间已到达该流中的时间t,这意味着不应该有来自流的具有时间戳t’<= t的元素(即,具有更早或等于水印的时间戳的事件)。

此时间通常在进入Flink之前嵌入记录中,并且可以从每个记录中提取该事件时间戳。 在事件时间,时间的进展取决于数据,而不是任何时钟。 事件时间程序必须指定如何生成事件时间水印,这是表示事件时间进度的机制。 该水印机制在下面的后面部分中描述。

在一个完美的世界中,事件时间处理将产生完全一致和确定的结果,无论事件何时到达或其它们的顺序。 但是,除非事件已知按顺序到达(按时间戳),否则事件时间处理会在等待无序事件时产生一些延迟。 由于只能等待一段有限的时间,因此限制了确定性事件时间应用程序的运行方式。
假设所有数据都已到达,事件时间操作将按预期运行,即使在处理无序或延迟事件或重新处理历史数据时也会产生正确且一致的结果。 例如,每小时事件时间窗口将包含带有落入该小时的事件时间戳的所有记录,无论它们到达的顺序如何,或者何时处理它们。 (有关更多信息,请参阅有关迟到事件的部分。)
请注意,有时基于事件时间的程序处理实时数据时,它们将使用一些处理时间(processing time)操作,以保证它们及时进行。

IngestionTime

进入时间,是事件进入Flink的时间,即Flink消费到数据的时间。

假设Flink由于某些原因导致延时了,那么进入时间相应的也会延时,看具体的场景选择使用。

在源运算符处,每个记录将源的当前时间作为时间戳,并且基于时间的操作(如时间窗口)引用该时间戳。
进入时间在概念上位于事件时间和处理时间之间。与处理时间相比,它代价稍高,但可以提供更可预测的结果。 因为进入时间使用稳定的时间戳(在源处分配一次),所以对记录的不同窗口操作将引用相同的时间戳,而在处理时间中,每个窗口操作符可以将记录分配给不同的窗口(基于本地系统时钟和 任何传输延误)。

二、水印

参考:

Flink基于EventTime和WaterMark处理乱序事件和晚到的数据

总结:Flink之Event Time , Processing Time 和 Ingestion Time相关推荐

  1. 事件时间/处理时间/进入时间(Event Time / Processing Time / Ingestion Time)

    Flink在流处理程序中支持不同的时间概念. 处理时间(processing time):处理时间是指执行相应操作的机器的系统时间. 当流处理程序基于处理时间运行时,所有基于时间的操作(如时间窗口)将 ...

  2. 【Flink】IncompatibleClassChangeError: Found class org.apache.flink.streaming.runtime.tasks.Processing

    1.背景 测试Flink CEP,然后使用ProcessTime,然后报错如下 org.apache.flink.runt ime.client.JobExecut ionException: Job ...

  3. flink 自定义 窗口_Flink入门实战 (下)

    一. 时间语义与 Wartermark 1. Flink 中的时间语义 在 Flink 的流式处理中,会涉及到时间的不同概念,如下图所示: Event Time:是事件创建的时间.它通常由事件中的时间 ...

  4. 学习笔记Flink(二)—— Flink数据流模型、时间窗口和核心概念

    一.Flink编程数据流模型 1.1.Flink – API封装 Flink 提供不同级别的API封装来支持流/批处理应用程序. 1.2.Flink-编程数据流 Source:一个不会结束的数据记录流 ...

  5. Flink流计算编程--在WindowedStream中体会EventTime与ProcessingTime

    一.Flink流处理简介 Flink流处理的API叫做DataStream,可以在保证Exactly-Once的前提下提供高吞吐.低延时的实时流处理. 二.Flink中的Time模型 Flink中提供 ...

  6. 《从0到1学习Flink》—— 介绍Flink中的Stream Windows

    前言 目前有许多数据分析的场景从批处理到流处理的演变, 虽然可以将批处理作为流处理的特殊情况来处理,但是分析无穷集的流数据通常需要思维方式的转变并且具有其自己的术语(例如,"windowin ...

  7. Flink架构及工作原理

    System Architecture 分布式系统需要解决:分配和管理在集群的计算资源.处理配合.持久和可访问的数据存储.失败恢复.Fink专注分布式流处理. Components of a Flin ...

  8. flink 检查点_Flink检查点和恢复

    flink 检查点 Apache Flink is a popular real-time data processing framework. It's gaining more and more ...

  9. Flink中的Time与Window

    一.Time 在Flink的流式处理中,会涉及到时间的不同概念 Event Time:是事件创建的时间.它通常由事件中的时间戳描述,例如采集的日志数据中,每一条日志都会记录自己的生成时间,Flink通 ...

  10. Flink的时间语义和Watermark

    1 时间语义    数据迟到的概念是:数据先产生,但是处理的时候滞后了    在Flink的流式处理中,会涉及到时间的不同概念,如下图所示:    Event Time:是事件创建的时间.它通常由事件 ...

最新文章

  1. 三天学会Selenium,阿里p7精心整理自动化测试Selenium大礼包
  2. 不是开发者也能玩得high!科大讯飞1024开发者节,看AI如何改变你的生活
  3. post请求参数格式
  4. HTML 5 视频/音频参考手册
  5. 北斗导航 | GPS 信号频谱分析
  6. C# 引用类型的对象克隆(深拷贝)。
  7. Internet Explorer 6 中的 CSS 增强功能
  8. c++图的创建_利用Microsoft Visio 软件绘制工艺流程图
  9. pdf安装包_PDF多功能格式转换器安装教程附安装包
  10. 仿IOS通讯录效果,实现获取手机通讯录、字母排序显示、搜索联系人、拨打电话
  11. Android科大讯飞语音集成(语音输入,语音合成文字转声音)
  12. Unity 第三人称人物移动
  13. 射频S11与VSWR换算
  14. 系统中如何做到实名认证
  15. Air780E模块AT固件和AT手册
  16. 数组下标越界解析(以C语言为例)
  17. 怎么学习java?学习java的路线
  18. 晨风机器人插件编辑器_晨风机器人文本编辑器使用方法
  19. Android的界面设计规范
  20. 安防网络摄像头互联网直播视频流媒体服务器EasyNVR输出直播流 RTMP、HTTP-FLV、 HLS 的对比分析

热门文章

  1. 免费云存储工具类——七牛云(更改配置信息,直接使用)
  2. 【工作感悟】职场工作感悟(一)
  3. ps切图技巧、基础工具,使用方法总结
  4. python 二进制的数为啥带0b?,怎样去掉0b?
  5. 《道德经的人生智慧》读书笔记
  6. 搜狐狐友社交软件可以组合各个产品的用户量
  7. 用logisim设计交叉耦合电路时遇到的红线问题
  8. AD中使用Net Label时,编译时为什么总是Floating。出现的原因。
  9. Parity Bit 奇偶校验
  10. windows编程经典书籍+VC++学习路线资料