Flink CDC 实时数据集成架构设计实践

结合Flink CDC 3.x Pipeline API从传统Lambda架构痛点出发展示全自动化数据集成生产级架构

袋鼠云
袋鼠云
数据治理

传统的企业数据集成架构通常采用 Lambda 模式:批处理链路用 Spark 或 DataX 定期全量同步,流处理链路用 Canal 或 Debezium 加 Kafka 加 Flink SQL 实现实时增量同步。两条链路各自独立维护,代码逻辑重复,全量与增量之间的无缝衔接更是难点——全量同步期间产生的增量变更容易丢失,重新全量又会浪费计算资源。Flink CDC 从 3.0 版本开始引入 Pipeline API 和声明式 YAML 配置范式,将全量快照与增量 Binlog 读取统一在单一任务中执行,从根本上消除了 Lambda 架构的双链路问题。本文结合 Flink CDC 3.x(截至 2026 年 3 月已发布至 3.6.0 版本)的最新能力,展示生产级实时数据集成架构的设计实践。

Flink CDC 在 1.x 和 2.x 时代以 SQL Connector 形式存在,用户需要编写 Flink SQL DDL 来定义 Source 和 Sink,再将作业提交到 Flink 集群运行。这种方式对熟悉 Flink 生态的开发者友好,但对数据工程师的学习门槛较高,且缺乏端到端的 Schema Evolution 支持。

3.0 版本引入了 Pipeline API,这是架构上的重大转变。用户只需编写一份 YAML 文件,声明 Source、Sink、路由规则和转换逻辑,通过 flink-cdc.sh CLI 工具即可提交作业。整个流程不再要求用户编写任何 Flink 代码。Pipeline API 的核心组件包括:Source Connector(支持 MySQL、PostgreSQL、Oracle、MongoDB 等)、Sink Connector(支持 Doris、StarRocks、Iceberg、Paimon、Kafka、Hologres 等)、Route 规则(定义源表到目标表的映射关系,支持多表合并到单表)和 Transform 转换(使用类 SQL 语法对字段进行投影、计算和常量列添加)。

截至 3.6.0 版本,Flink CDC 的 Connector 生态已经相当完善。新增了 Oracle Source Connector 和 Apache Hudi Sink Connector(3.6.0 新增),PostgreSQL Sink 支持 Schema Evolution(3.5.0 引入),Fluss Connector 支持 Lenient 模式的 Schema Evolution(3.6.0 新增)。Flink 版本支持也扩展到了 1.20.x 和 2.2.x。

全增量一体化执行机制

Flink CDC 实现全增量一体化的核心机制是:作业启动时先对源表进行一致性快照读取(全量阶段),快照完成后无缝切换到 Binlog 读取模式(增量阶段),两者在同一个 Flink 作业中通过 Checkpoint 机制保证 exactly-once 语义。

全量阶段的实现依赖于 JDBC 的事务读取能力。Flink CDC 为每个表创建一个读取事务,按主键范围分片(Split)并行读取快照数据。快照读取的并行度由 source.split 分片数控制,对于大表可以调高分片数提升读取速度。快照完成后,Flink 通过 binlog offset 记录切换点,开始消费增量变更。

这个过程中有一个容易被忽视的细节:快照读取期间源表仍在被业务写入。Flink CDC 通过在快照开始时记录 binlog 起始位点,在快照完成后从该位点开始消费增量,确保不丢失任何在快照期间产生的变更。但如果源表的 binlog 保留时间不足(例如 MySQL 的 expire_logs_days 设置过短),在大表快照耗时过长的情况下,binlog 可能已经被清理,导致无法切换到增量模式。生产环境中建议将 binlog 保留时间设置为至少 7 天,对于大表同步场景建议 14 天。

实时开发 StreamWorks

覆盖采集、开发、运维全链路的云原生一站式实时数据开发平台

了解产品

生产级 YAML 配置实践

一份生产级的 Flink CDC YAML 配置通常包含以下核心段落。以下以 MySQL 到 Doris 的典型同步场景为例说明关键配置项。

Source 段需要配置数据库连接信息、需要同步的表列表(支持正则匹配)和 server-id 范围。server-id 必须在源数据库的 CDC 消费者中保持唯一,范围大小决定了全量阶段的并行度。例如配置 server-id: 8601-8604,表示最多支持 4 个并行分片同时读取快照。

Sink 段配置目标数据库的连接信息和写入策略。关键配置项包括 sink.type-normalize-strategy,设置为 BROADEN 表示在写入时自动拓宽目标表的字段类型以兼容源表的 Schema 变更。exclude.schema.changes 配置项用于排除不需要自动同步的 Schema 变更类型,例如 drop 和 truncate.table 这类破坏性操作应该由 DBA 手动审批后再执行。

Pipeline 段定义作业名称和 Schema 变更行为。schema.change.behavior 设置为 EVOLVE 表示自动同步源表的 DDL 变更到目标表,设置为 IGNORE 则忽略 Schema 变更只同步数据。生产环境推荐先使用 EVOLVE 模式跑通全流程,再针对高风险变更类型设置 exclude 规则。

Route 段是实现多表合并的关键。当业务上按租户或模块将数据分库存表,但分析时需要汇总到一张宽表时,可以通过 Route 规则将多个源表映射到同一个 Sink 表。例如将 order_db_001.orders、order_db_002.orders 等分库表全部路由到 Doris 的 dwd_orders 表,同时自动添加源表标识列用于区分数据来源。

Transform 段支持使用类 SQL 语法对数据进行实时转换。例如添加计算列:calc columns: order_amount as price * quantity,或者对字段进行类型转换和空值处理。Transform 在 Flink 作业的算子层执行,不涉及额外的外部计算引擎,延迟通常在毫秒级别。

Schema Evolution 的生产考量

Schema Evolution 是生产级数据集成中最容易出问题的环节。源表的一次 ALTER TABLE 操作(例如新增字段、修改字段类型、重命名字段)如果处理不当,可能导致同步任务失败或目标表数据不一致。

Flink CDC 3.x 提供了四种 Schema Evolution 模式。Evolve 模式自动同步 DDL 变更;Ignore 模式忽略 Schema 变更只同步数据;Exception 模式在遇到 Schema 变更时抛出异常终止作业;Lenient 模式在遇到不兼容的 Schema 变更时尝试兼容处理而非直接失败。Lenient 模式是 3.2.0 版本引入的,适合 Schema 变更频繁但多数为兼容性变更的场景。

生产环境的推荐策略是:对于核心业务表(订单、交易等),使用 Evolve 模式配合 exclude 规则排除高风险 DDL 操作;对于日志类和流水类表,可以使用 Lenient 模式减少因 Schema 变更导致的作业中断。无论使用哪种模式,都建议在 Schema 变更发生后及时检查目标表的数据一致性,可以通过对比源表和目标表的行数及校验和来实现。

数据治理

统一标准、质量、安全与资产管理,沉淀高质量数据集,支撑经营决策、监管合规与 AI 应用。

了解解决方案

大表同步的性能优化

当单表数据量超过千万级时,全量快照阶段可能耗时数小时甚至数天,这对业务数据库的读取性能和网络带宽都是考验。几个关键的优化手段。

调整全量阶段的读取并行度。通过增加 source.split 分片数,可以将大表的快照读取拆分为更多并行任务。但分片数不能超过 source 配置的 server-id 范围大小,且过多分片会增加源数据库的并发读取压力。一般建议分片数不超过 16,且确保源数据库的 max_connections 有足够余量。

使用增量 Checkpoint 缩短故障恢复时间。Flink CDC 的全量读取支持增量 Checkpoint(通过 source.incremental.reading.enabled 配置开启),在故障恢复时不需要从头重新读取全量数据,而是从上次 Checkpoint 位点继续。对于数天才能完成的全量同步,这个功能能将故障恢复时间从天级缩短到分钟级。

控制 Sink 端的写入吞吐。对于 Doris 和 StarRocks 等 OLAP 数据库,全量数据写入时建议使用 Stream Load 而非逐行 INSERT,减少 SQL 解析和事务开销。同时控制单个 Sink 任务的写入速率,避免对目标集群的 Compaction 和查询性能造成影响。

监控与运维

Flink CDC 作业上线后需要持续监控其运行状态。核心监控指标包括:消费延迟(Source 端的 Binlog Lag)、Checkpoint 成功/失败率、Checkpoint 耗时、Sink 写入速率和失败重试次数。

消费延迟是最关键的指标。在全量阶段不存在延迟概念(数据一次性读完),但切换到增量阶段后,如果 Binlog Lag 持续增长,说明消费速度跟不上写入速度,需要排查瓶颈。常见原因包括:Flink 作业的并行度不足、Sink 端写入存在性能瓶颈、网络带宽受限等。

在实时数据集成的生产实践中,像 StreamWorks 这类基于 Flink 引擎构建的一体化数据集成平台,可以在上述 YAML 配置基础上提供作业管理、监控告警和运维管控能力,降低从开源组件到生产落地之间的工程门槛。但核心的架构设计原则——全增量一体化、声明式配置、Schema Evolution 策略选择——无论使用哪种工具都是相通的。

开启Data+AI 之旅

填写表单,获取专属解决方案

400-002-1024

工作日 9:00-18:00

关注公众号

获取最新产品动态与技术干货

关注公众号

企业微信

扫码添加企业微信