Flink 负责时间,Iceberg 负责记忆:Pinterest 如何最终确认数据分区?

BestBlog编程类文章 · 软件开发

📌 一句话摘要

Pinterest 引入基于事件时间的分区最终确认机制,结合 Flink 衡量事件时间推进与 Iceberg 元数据发布单调递增水位线,解决 CDC 摄取中数据分区延迟到达的核心难题。

📝 详细摘要

Pinterest 为下一代数据库摄取框架引入了基于事件时间的分区最终确认机制,使下游任务能够判断流式数据何时已足够完整可安全消费。该方案利用 Apache Flink 衡量事件时间推进情况,通过 Apache Iceberg 元数据发布单调递增的最终确认水位线。系统从 CDC 记录中提取事件时间,在 Flink 检查点时收集最小值、最大值和百分位数统计,这些数据存储在 Iceberg 快照摘要中并压缩至几百字节。默认策略取可配置数量的近期提交中最小事件时间向下取整到小时,百分位数策略则可牺牲部分完整性换取更新鲜数据。该水位线以 Iceberg 表属性形式存储,下游传感器无需额外协调服务即可读取。

💡 主要观点

  1. 引入事件时间水位线机制解决 CDC 分区延迟问题 传统批处理依赖任务完成点判断分区就绪,流式摄取缺乏明确完成点。Pinterest 方案通过 Flink 衡量事件时间推进,用 Iceberg 发布单调递增水位线,让下游任务判断数据何时足够完整可安全消费。
  2. Flink 与 Iceberg 结合生成表级完整性信号 Flink 检查点收集事件时间统计(最小值、最大值、百分位数),压缩后存储在 Iceberg 快照摘要中。该元数据以表属性形式保存,下游 Spark 等任务可直接读取,无需额外协调服务。
  3. 单调递增水位线防止数据回退 最终确认水位线向上单调递增,确保延迟到达的记录不会使已发布的分区确认值向后回退,维持数据消费的确定性。
  4. 提供可配置的完整性与新鲜度平衡策略 默认策略取近期提交最小事件时间向下取整,优先保证完整性;百分位数策略可调节,牺牲部分完整性换取更新鲜的数据,满足不同业务场景需求。

💬 文章金句

  • Flink 负责时间,Iceberg 负责记忆
  • 最终确认水位线单调递增,可以防止延迟到达的记录使已经发布的值向后回退
  • 最终确认不再是任务结束所带来的副产品

📊 文章信息

AI 初评:85
来源:InfoQ 中文
作者:InfoQ 中文
分类:软件编程
语言:中文
阅读时间:6 分钟
字数:1335
标签: 编程与工程, 数据工程, 系统设计, 分布式系统, Apache Flink

查看原文