Flink 基础学习(六)时间 Time 和 Watermark(下)

简介: 前面的例子中有出现过 时间窗口 TimeWindow 这个词语,其实是两个概念,时间 Time 和窗口 Window。 本篇文章比较干货,主要翻译自官网(参考资料一), 来讲下关于 Time 的学习、理解以及配套的概念 Watermark。 Watermark 有两种译法:水位线、水印。由于个人暂时分不清,所以后面一律以英文 Watermark 出现。

并行流中的 Watermark

Watermark 在源函数处或源函数之后直接生成。源函数的每个并行子任务通常独立生成其水印。这些水印定义了该特定并行源处的事件时间。

随着 Watermark 在流媒体程序中的流动,它们会提前到达其到达的 OperatorEvent Time。每当 Operator 提前其事件时间时,都会为其后续 Operator 在下游生成新的 Watermark

一些运算符消费多个输入流;例如,并集 union、键控 keyBy(…) 或分区 partition(…) 函数的运算符。这样的 Operator 的当前事件时间是其输入流的事件时间中的最小值。随着其输入流更新其事件时间,Operator 也将更新。

下图显示了流过并行流的事件和 Watermark 的示例,Operator 跟踪事件时间。14.jpg(并行流用的不多,这里留个坑吧,待之后用到再来补=-=)

延迟的元素

某些元素可能会违反 Watermark 条件,这意味着即使在发生 Watermark(t) 之后,也会出现更多时间戳为 t'<= t 的元素。实际上,在许多现实世界的设置中,某些元素可以任意延迟,从而无法指定某个事件时间戳记的所有元素都将发生的时间。此外,即使可以限制延迟,通常也不希望将 Watermark 延迟太多,因为这会导致事件时间窗的评估延迟过多。

由于这个原因,流式传输程序可能会明确期望某些延迟元素。延迟元素是指系统的事件时间时钟(由 Watermark 指示)在经过延迟元素时间戳之后的时间到达的元素。有关如何在事件时间窗口中使用延迟元素的更多信息,请参见允许延迟。

Watermark 实际使用例子

  1. Generating Timestamps / Watermarks
  2. Flink Watermark 机制浅析

看了这两篇文章后,能对 Watermark 的设置有个基础的了解,在实际场景中,需要评估下面两者:定期 Watermark或标点 Watermark,了解两者差别后才使用。

总结

本篇主要讲了三种时间类型:Processing TimeEvent TimeIngestion Time,了解了它们所发生的位置,三者的使用差别,以及 Watermark 与 事件时间 Event Time 的关系,可以使用 Watermark 来解决乱序的事件流,请参考实际使用例子的链接,调整算法来达到你所需要解决的实际场景~

以及本篇时间 Time 的介绍有点“太干”,学起来有点费力,如有其它学习建议或文章不对之处,请与我联系~

项目地址

https://github.com/Vip-Augus/flink-learning-note

git clone https://github.com/Vip-Augus/flink-learning-note

参考资料

  1. Event Time
  2. Flink 从 0 到 1 学习 —— Flink 中几种 Time 详解
  3. Flink Watermark 机制浅析
  4. Flink 小贴士 (3): 轻松理解 Watermark
  5. Generating Timestamps / Watermarks
  6. 允许延迟


相关实践学习
基于Hologres+Flink搭建GitHub实时数据大屏
通过使用Flink、Hologres构建实时数仓,并通过Hologres对接BI分析工具(以DataV为例),实现海量数据实时分析.
实时计算 Flink 实战课程
如何使用实时计算 Flink 搞定数据处理难题?实时计算 Flink 极客训练营产品、技术专家齐上阵,从开源 Flink功能介绍到实时计算 Flink 优势详解,现场实操,5天即可上手! 欢迎开通实时计算 Flink 版: https://cn.aliyun.com/product/bigdata/sc Flink Forward Asia 介绍: Flink Forward 是由 Apache 官方授权,Apache Flink Community China 支持的会议,通过参会不仅可以了解到 Flink 社区的最新动态和发展计划,还可以了解到国内外一线大厂围绕 Flink 生态的生产实践经验,是 Flink 开发者和使用者不可错过的盛会。 去年经过品牌升级后的 Flink Forward Asia 吸引了超过2000人线下参与,一举成为国内最大的 Apache 顶级项目会议。结合2020年的特殊情况,Flink Forward Asia 2020 将在12月26日以线上峰会的形式与大家见面。
相关文章
|
消息中间件 分布式计算 大数据
大数据-121 - Flink Time Watermark 详解 附带示例详解
大数据-121 - Flink Time Watermark 详解 附带示例详解
312 0
|
传感器 监控 数据挖掘
Flink 四大基石之 Time (时间语义) 的使用详解
Flink 中的时间分为三类:Event Time(事件发生时间)、Ingestion Time(数据进入系统时间)和 Processing Time(数据处理时间)。Event Time 通过嵌入事件中的时间戳准确反映数据顺序,支持复杂窗口操作。Watermark 机制用于处理 Event Time,确保数据完整性并触发窗口计算。Flink 还提供了多种迟到数据处理方式,如默认丢弃、侧输出流和允许延迟处理,以应对不同场景需求。掌握这些时间语义对编写高效、准确的 Flink 应用至关重要。
899 21
|
数据安全/隐私保护 流计算
Flink四大基石——2.Time
Flink四大基石——2.Time
200 1
|
分布式计算 Java 大数据
大数据-122 - Flink Time Watermark Java代码测试实现Tumbling Window
大数据-122 - Flink Time Watermark Java代码测试实现Tumbling Window
253 0
|
监控 Apache 流计算
时间的守卫者:揭秘Flink中Watermark如何掌控数据流的时空秩序?
【8月更文挑战第26天】Apache Flink是一款功能强大的流处理框架,其Watermark机制为核心,确保了系统即使面对数据乱序或延迟也能准确处理时间相关的特性。Watermark作为一种特殊事件,标记了所有在此之前发生事件的最晚时间点,这对于时间窗口操作至关重要。
322 0
|
数据处理 Apache 流计算
Flink Watermark和时间语义
Flink Watermark和时间语义
|
消息中间件 Kubernetes Java
实时计算 Flink版操作报错合集之写入 Kafka 报错 "Failed to send data to Kafka: Failed to allocate memory within the configured max blocking time 60000 ms",该怎么解决
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
1301 0
|
消息中间件 关系型数据库 MySQL
实时计算 Flink版操作报错合集之使用 Event Time Temporal Join 关联多个 HBase 后,Kafka 数据的某个字段变为 null 是什么原因导致的
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
473 0
|
Java Scala 数据安全/隐私保护
Flink实战(七) - Time & Windows编程(下)
Flink实战(七) - Time & Windows编程(下)
365 0
Flink实战(七) - Time & Windows编程(下)
|
消息中间件 Java 程序员
Flink实战(七) - Time & Windows编程(上)
Flink实战(七) - Time & Windows编程(上)
287 0
Flink实战(七) - Time & Windows编程(上)