Pinterest 下一代数据库摄入框架中的自动化模式演进 笔记

Pinterest 下一代数据库摄入框架中的自动化模式演进

Pinterest 为其基于 Kafka 的 CDC 摄入平台开发了一套稳健、自动化的模式演进框架。模式变更是跨系统的关键契约,若缺乏管控的演进可能导致管道故障和数据不一致。其解决方案旨在通过将其视为多阶段收敛过程,使模式演进具备安全性、可重复性和可扩展性。该架构涉及 CDC 源、Kafka、用于转换的 Flink 以及用于向 Iceberg 表执行 upsert 操作的 Spark。核心组件是一个可靠的接入模型,该模型以包含稳定数字标识符的模式定义文件作为单一事实来源。更新通过基于 PR 的发布流程(包含版本控制和审计)自动传播至 Kafka、Flink、Spark 和 Iceberg。该系统主要支持增量式模式变更,以维持向后兼容性并最小化复杂性。类型变更严格限制为保留语义含义的变更,例如数值精度扩展。模式演进通过三阶段收敛模型进行管理,以维持管道可用性。第一阶段更新 Iceberg 模式,第二阶段部署更新后的 Flink 和 Spark 代码,第三阶段确保数据收敛。这种分阶段方法将模式传播与数据正确性解耦,允许在定义的 SLA 范围内存在临时差异。Pinterest 采用基于 SLA 的模式演进模型,优先保证可预测性和运营安全性。部署策略经过精心管理,尤其是针对 Flink,以防止数据丢失。对于不支持或存在歧义的情况(如默认值或主键变更),设有特定的手动恢复路径。针对 CREATE TABLE 差异的歧义问题,通过对比数据库的实际 DDL 历史记录来解决,而非从文本变更中推断意图。并发模式变更按顺序处理,以防止竞态条件,确保串行收敛。列转换通过为模式添加所需转换注解进行管理,这些注解随后被注入摄入管道。错误处理与恢复机制(特别是针对 Spark 故障)确保处理能够从最后一个成功的水印处恢复。
CdXz5zHNQW_srAU1TSiiq.png