当前位置: 首页 > news >正文

如何正确理解flink 消费kafka时的watermark

案例1

在source 层面用全量数据watermark 对后面的窗口计算是否有影响?

KafkaSource<Event> source = KafkaSource.<Event>builder().setWatermarkStrategy(WatermarkStrategy.forBoundedOutOfOrderness(Duration.ofSeconds(5)).withTimestampAssigner(e -> e.eventTime))  // 全量WM:order+click污染!.build();tream.filter(e -> e.type.equals("order"))  .window(...).sum();  tream.filter(e -> e.type.equals("click"))  .window(...).sum();  
分析

10s(order) → 12s(click) → 15s(order) → 18s(click) → 20s(order)

全是数据生成的watermark是20-5=15
order 数据生成的watermark是 20-5=15
click 数据生成的watermark是 18-5=13
假设窗口大小是10s,现在又来了一条数据25s(order)
这里会导致窗口生成的watermark是25-5=20,刚好可以触发窗口计算了,可实际上可click这个数据流还有部分数据未到达,比如19(click) 就会漏算。所以这样生成watermark会有问题

案例2

上面的问题可以通过filter 精确分流,然后再生成watermark

public class WatermarkMasterTemplate {public static void main(String[] args) {// 1. Source:无WM(零污染)KafkaSource<Event> source = KafkaSource.builder().build();// 2. 业务分流 + 独立WM(最精确)stream.filter(e -> e.type.equals("order")).assignTimestampsAndWatermarks(preciseWM("order")).window(...).print("ORDER");stream.filter(e -> e.type.equals("click")) .assignTimestampsAndWatermarks(preciseWM("click")).window(...).print("CLICK");}static WatermarkStrategy<Event> preciseWM(String type) {return WatermarkStrategy.forBoundedOutOfOrderness(Duration.ofSeconds(5)).withTimestampAssigner(e -> e.eventTime);}
}
分析

10s(order) → 12s(click) → 15s(order) → 18s(click) → 20s(order)

order 数据生成的watermark是 20-5=15
click 数据生成的watermark是 18-5=13
这样不同流生成的watemark 生成的流是精确的

案例3

如果先加一个rebance 操作,是否会影响per-partition watermark 语义

public class WatermarkMasterTemplate {public static void main(String[] args) {// 1. Source:无WM(零污染)KafkaSource<Event> source = KafkaSource.builder().build();source.stream().rebalance().assignTimestampsAndWatermarks(preciseWM("order")).window(...).sum().print("ORDER");}static WatermarkStrategy<Event> preciseWM(String type) {return WatermarkStrategy.forBoundedOutOfOrderness(Duration.ofSeconds(5)).withTimestampAssigner(e -> e.eventTime);}
}
分析

分区
partition a 10s(order) → 11s(click) → 14s(order) → 16s(click) → 18s(order)
partition b 12s(order) → 13s(click) → 15s(order) → 17s(click) → 19s(order)
但是如果是这样rebalance的话,会打乱单分区的watermark 的递增性,导致watermark 生成不精确

http://www.dtcms.com/a/515807.html

相关文章:

  • 未来的 AI 操作系统(六)——从“大模型”到“小智能”:Agent生态的去中心化演化
  • [人形机器人]宇树G1拆解分析 - 主控部分
  • 建筑毕业设计代做网站建筑网格组织
  • 面向汽车硬件安全模块的后量子安全架构
  • 广州网站制作哪家公司好做视频用的网站有哪些
  • Petalinux高版本自动登录与开机自启动完全指南
  • 用 AI 编码代理重塑前后端交互测试的未来
  • PID算法基础知识
  • TDengine TSDB 3.3.8.0 上线:SMA、TLS、TDgpt、taosX、taosgen 一次全进化
  • Chainlit+LlamaIndex 多模态 RAG 开发实战8:Text2SQL 技术解析与工作流驱动的数据库 RAG 全流程实现
  • 标定参数从相机模组读出来
  • OCR的新高度?PaddleOCR-VL 与 DeepSeek-OCR 的技术与应用横评
  • 上传网站程序网站稿件管理发布系统
  • 展示型网站首页设计解析微信对接网站可以做301跳转吗
  • 前端tree树
  • LeetCode:46. 全排列
  • 23种设计模式总结
  • 蓝牙中的DAFC 和 PAwR概念理解
  • 《Foundation 列表》
  • 微服务面试基础
  • 网站字体大小是多少珠海网站管理公司
  • wordpress鼠标经过图片google seo是什么啊
  • Prometheus+Grafana实现Springboot服务监控
  • 保定企业建站程序设计类专业就业前景怎么样
  • centos7部署 Prometheus 3.0.0 + Grafana 10.3.3 + Alertmanager 0.27.0
  • IPv4与IPv6的对比
  • 如何查看 ubuntu 系统信息
  • 「用Python来学微积分」问题,二维图形关于任意直线的对称变换
  • php网站开发的发展前景安徽建设工程信息网网
  • R语言:非平稳时间序列实例