Watermark 是怎么生成和传递的?

分析&回答

Watermark 介绍

Watermark 本质是时间戳,与业务数据一样无差别地传递下去,目的是衡量事件时间的进度(通知 Flink 触发事件时间相关的操作,例如窗口)。

  1. Watermark 是一个时间戳, 它表示小于该时间戳的事件都已经到达了。
  2. Watermark 一般情况在源位置产生(也可以在流图中的其它节点产生), 通过流图节点传播。
  3. Watermark 也是 StreamElement, 和普通数据一起在算子之间传递。
  4. Watermark 可以触发窗口计算, 时间戳为 Long.MAX_VALUE 表示算子后续没有任何数据。

Watermark 类型

flink 采用 WatermarkStrategy 设置自定义 Watermark 类型,WatermarkGenerator 是 Watermark 的基类。flink 实现了 Punctuated Watermarks 从事件获取事件的时间戳 、Periodic Watermarks 周期获取事件的时间戳

Watermark 的产生

  • Watermark 事件产生 PunctuatedAssigner根据事件属性eventTimestamp生成
  • Watermark 周期产生 结合算子 TimestampsAndWatermarksOperator 和 TimePeriodicWatermarkGenerator,分析 Watermark 的产生流程。如下图所示,横轴表示 processing time,圆形表示事件,圆形中的时间 t 表示事件时间,圆形落在横轴表示事件在算子中的处理,其中 Watermark 的产生周期为 60s 和允许延迟时间为 10s。以第一个周期 [0,60) 为例,获取事件中的最大事件时间 max,向下游发送 watermark(最大事件时间 - 允许延迟时间 - 1)。

Watermark 的传递

Watermark 的传递方式是广播,即广播方式发送到下游。Watermark 与业务数据一样,无差别地传递下去。

多并发的场景下

Watermark 是 source task 产生,经过 keyby 分组后触发窗口计算。

  • Watermark 要单调递增
  • ② 如果算子有多个上游(广播)即输入多个 Watermark(T),则该算子取最小 Watermark 即 min(Watermark(T1), Watermark(T2))

反思&扩展

Flink中的时间有三种类型,如下图所示:

  1. Event Time:是事件创建的时间。它通常由事件中的时间戳描述,例如采集的日志数据中,每一条日志都会记录自己的生成时间,Flink通过时间戳分配器访问事件时间戳。
  2. Ingestion Time:是数据进入Flink的时间。
  3. Processing Time:是每一个执行基于时间操作的算子的本地系统时间,与机器相关,默认的时间属性就是Processing Time。

对于迟到数据是怎么处理的

Flink中 WaterMark 和 Window 机制解决了流式数据的乱序问题,对于因为延迟而顺序有误的数据,可以根据eventTime进行业务处理,对于延迟的数据Flink也有自己的解决办法,主要的办法是给定一个允许延迟的时间,在该时间范围内仍可以接受处理延迟数据:

  • 设置允许延迟的时间是通过allowedLateness(lateness: Time)设置
  • 保存延迟数据则是通过sideOutputLateData(outputTag: OutputTag[T])保存
  • 获取延迟数据是通过DataStream.getSideOutput(tag: OutputTag[X])获取

喵呜面试助手:一站式解决面试问题,你可以搜索微信小程序 [喵呜面试助手] 或关注 [喵呜刷题] -> 面试助手 免费刷题。如有好的面试知识或技巧期待您的共享!

相关推荐
第二只羽毛2 分钟前
单例模式的初识
java·大数据·数据仓库·单例模式
沃达德软件6 小时前
智慧警务图像融合大数据
大数据·图像处理·人工智能·目标检测·计算机视觉·目标跟踪
陈奕昆8 小时前
n8n实战营Day3:电商订单全流程自动化·需求分析与流程拆解
大数据·开发语言·人工智能·自动化·需求分析·n8n
v***88569 小时前
SpringBoot集成Flink-CDC,实现对数据库数据的监听
数据库·spring boot·flink
semantist@语校9 小时前
第五十一篇|构建日本语言学校数据模型:埼玉国际学院的城市结构与行为变量分析
java·大数据·数据库·人工智能·百度·ai·github
赵渝强老师9 小时前
【赵渝强老师】阿里云大数据集成开发平台DataWorks
大数据·阿里云·云计算
xieyan08119 小时前
卖出与止损策略
大数据
Elastic 中国社区官方博客9 小时前
使用 LangChain 和 Elasticsearch 开发一个 agentic RAG 助手
大数据·人工智能·elasticsearch·搜索引擎·ai·langchain·全文检索
z***026010 小时前
Python大数据可视化:基于大数据技术的共享单车数据分析与辅助管理系统_flask+hadoop+spider
大数据·python·信息可视化
知识分享小能手10 小时前
openEuler入门学习教程,从入门到精通,openEuler 24.03 环境下 Hadoop 全面实践指南(19)
大数据·hadoop·openeuler