专栏首页SmartSiFlink 轻松理解Watermark

Flink 轻松理解Watermark

当我们第一次使用 Flink 时,可能会对 Watermark 感到困惑,其实 Watermark 并不复杂。让我们通过一个简单的例子来说明为什么我们需要 Watermark,以及它是如何工作的。

在下文中的例子中,我们有一个带有时间戳的事件流,这些事件并不是按顺序到达的。图中的数字表示事件发生的时间戳。第一个事件在时间 4 到达,后面跟着一个发生更早时间的事件(时间 2),以此类推:

注意这是一个基于事件时间处理的例子,这意味着时间戳反映的是事件发生的时间,而不是事件处理的时间。基于事件时间处理的强大之处在于创建流处理程序无论是处理实时的数据还是重新处理历史的数据,都能保证结果的一致。

关于不同概念时间(例如事件时间,处理时间或摄入时间)的更多信息可以参考Flink1.4 事件时间与处理时间

现在假设我们正在创建一个排序的数据流。这意味着应用程序处理流中的乱序到达的事件,并生成同样事件但按时间戳(事件时间)排序的新数据流。

1. 理解一

数据流中的第一个元素是时间 4,但是我们不能直接将它作为排序后数据流的第一个元素输出。因为数据可能是乱序到达的,可能还有一个更早发生的数据还没有到达。事实上,我们可以预见这个流的一些未来。我们知道新数据流至少要等到时间 2 到达后才输出结果。

进行缓存,就必然有延迟。

2. 理解二

如果我们做错了(没有更早的数据了),我们可能会永远等待下去。首先,我们应用程序看到的第一个事件是时间 4,然后是时间 2 。是否会有一个比时间 2 更早的数据到达呢?也许会,也许不会。我们可以一直等下去,但可能会永远等不到时间 1 。

我们不能无限制的等待下去,我们必须果敢地输出时间 2 作为排序后新数据流的第一个结果。

3. 理解三

我们需要定义某种策略来决定什么时候不再去停止等待更早数据的到来。

这就是 Watermark 的作用,定义了什么时候不再等待更早的数据。

Flink 中基于事件时间的处理依赖于一种特殊的带时间戳的元素,我们称之为 Watermark,它们由数据源或是 Watermark 生成器插入数据流中。带有时间戳 tWatermark 可以理解为所有时间戳小于等于 t 的事件都(在某种合理的概率上)已经到达了。

我们什么时候应该停止等待,然后输出时间 2 来开启新的数据流?当时间戳大于等于 2 的 Watermark 到达时我们停止等待。

4. 理解四

我们有不同的策略来生成 Watermark。

我们都知道每个事件都会在延迟一段时间后到达,而不同事件的延迟会不一样,所以会有些事件比其他事件延迟更多。一种简单的方法是假设这些延迟不会超过某个最大值延迟时间。Flink 把这种策略称之为有界无序 Watermark(bounded-out-of-orderness)。当然也有很多更复杂的方法来生成 Watermark,但是对于大多数应用来说,固定延迟的方法已经足够了。

如果想要创建一个类似排序的流应用程序,可以使用 Flink 的 ProcessFunction。它提供了对事件时间计时器(即,基于 Watermark 到达触发的回调)的访问,还提供了管理状态的接口(缓存事件直到它们发送到下游)。

原文:Watermarks in Apache Flink Made Easy

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Flink及Storm、Spark主流流框架比较,到底谁会更胜一筹?

    随着大数据时代的来临,大数据产品层出不穷。我们最近也对一款业内非常火的大数据产品 - Apache Flink做了调研,今天与大家分享一下。Apache Fli...

    加米谷大数据
  • 理解Flink watermark

    所谓事件时间,就是Flink DataStream中的数据元素自身带有的、其实际发生时记录的时间戳,具有业务含义,并与系统时间独立。很显然,由于外部系统产生的数...

    神秘的寇先森
  • Flink学习——时间概念与Watermark

    对于流式处理,最大的特点是数据上具有时间的属性特征,Flink根据时间产生的不同位置分为三个时间概念:

    俺也想起舞
  • Flink时间语义、Event Time和Watermark机制深度解析

    在流处理中,时间是一个非常核心的概念,是整个系统的基石。比如,我们经常会遇到这样的需求:给定一个时间窗口,比如一个小时,统计时间窗口的内数据指标。那如何界定哪些...

    PP鲁
  • 2021年大数据Flink(十七):Flink四大基石

    Flink之所以能这么流行,离不开它最重要的四个基石:Checkpoint、State、Time、Window。

    Lanson
  • Flink核心概念:系统架构、时间处理、状态与检查点

    上图的Flink示例程序对一个数据流做简单处理,整个过程包括了输入(Source)、转换(Transformation)和输出(Sink)。程序由多个DataS...

    PP鲁
  • 11-时间戳和水印

    地址为:https://yq.aliyun.com/articles/666056?spm=a2c4e.11155435.0.0.106e1b10snGqMd

    王知无-import_bigdata
  • 13道Flink企业级高频面试题

    相信小伙伴们对于Flink一定不会感到陌生,作为连续三年蝉联第一,荣膺全球最活跃的 Apache 开源项目,Flink在中国的热度也一直是居高不下。近几年,在...

    大数据老哥
  • Apache Flink 1.12.0 正式发布,流批一体真正统一运行!

    Apache Flink 社区很荣幸地宣布 Flink 1.12.0 版本正式发布!近 300 位贡献者参与了 Flink 1.12.0 的开发,提交了超过 1...

    zhisheng
  • 干货 | 13道精选Flink面试题

    相信小伙伴们对于Flink一定不会感到陌生,作为连续三年蝉联第一,荣膺全球最活跃的 Apache 开源项目,Flink在中国的热度也一直是居高不...

    大数据梦想家
  • 5分钟Flink - 时间与语义案例详解

    主要是针对数据乱序的问题,需要使用 eventtime 和 watermark 来解决

    Python编程爱好者
  • [白话解析] Flink的Watermark机制

    对于Flink来说,Watermark是个很难绕过去的概念。本文将从整体的思路上来说,运用感性直觉的思考来帮大家梳理Watermark概念。

    罗西的思考
  • 零基础学Flink:Window & Watermark

    在上一篇文章中,我们学习了flink的时间。 本文我们来一起研究下 window 和 watermark 。

    麒思妙想
  • Flink 1.11:更好用的流批一体 SQL 引擎

    许多的数据科学家,分析师和 BI 用户依赖交互式 SQL 查询分析数据。Flink SQL 是 Flink 的核心模块之一。作为一个分布式的 SQL 查询引擎。...

    数据社
  • Flink 模拟心跳数据推动事件时间watermark方法

    Flink支持以下三种时间语义:事件时间(event time), 摄取时间(ingestion time), 处理时间(processing time)。其中...

    perayb
  • Flink最难知识点再解析 | 时间/窗口/水印/迟到数据处理

    时间、窗口、水印、迟到数据这四个知识点几乎是Flink这个框架最难点。我之前发了很多文章来解释。很多同学仍然理解不了。

    王知无-import_bigdata
  • 5分钟Flink - 时间语义和Watermark

    在 Flink 的流式处理中,绝大部分的业务都会使用 eventTime,一般只在 eventTime 无法使用时,才会被迫使用 ProcessingTime ...

    Python编程爱好者
  • Flink1.4 生成时间戳与Watermarks

    本节适用于在事件时间上运行的程序。有关事件时间,处理时间和提取时间的介绍,请参阅Flink1.4 事件时间与处理时间。

    smartsi
  • Apache Flink中的各个窗口时间的概念区分

    “ Apache Flink中提供了基于时间的窗口计算,例如计算五分钟内的用户数量或每一分钟计算之前五分钟的服务器异常日志占比等。因此Apache Flink在...

    CainGao

扫码关注云+社区

领取腾讯云代金券