Flink CDC 管道是什么
Flink CDC 3.x 提供声明式的 YAML 数据管道:用 source、sink、pipeline 三段描述一条从源库到目标端的数据流,通过 bin/flink-cdc.sh 提交给 Flink 集群运行。它把原本需要逐表编写 SQL 或 DataStream 代码的整库同步变成一份配置文件,适合把一批表同时同步到消息队列、数据湖或数仓,并在管道内完成库表改名路由。
基本信息
| 版本范围 | Flink CDC 3.x 起提供 Data Pipeline 与 YAML 作业 |
|---|---|
| 提交方式 | bin/flink-cdc.sh <pipeline.yaml> 提交到 Flink 集群 |
| 三段结构 | source(源连接与表范围)、sink(目标与写入参数)、pipeline(名称、并行度等) |
| 表范围 | 用 tables 显式列库表或用正则批量匹配 |
| 路由能力 | route 段可把源库表改名映射到目标库表 |
| 运行依赖 | 需要可用 Flink 集群或本地会话,MySQL 源端需具备 binlog 读取权限 |
典型使用场景
- 整库入湖:把业务库多张表一次性同步到湖仓,免去逐表建作业
- 库表改名:源端库表命名不规范时用 route 映射到目标端规范名
- 批量实时接入:新业务库接入时先生成 YAML 管道跑通链路,再按需细化
- 同步到消息队列:把变更流投递到 Kafka,供下游流式加工消费
- 迁移验证:用同一份管道配置对比不同目标端的写入效果
mysql-to-kafka.yaml 示例
mysql-to-kafka.yaml 示例
source:
type: mysql
hostname: 10.0.0.5
port: 3306
username: cdc_ro
password: '***'
tables: app\.orders, app\.users # 显式列出要同步的表
server-id: 5400-5404 # 与从库及其他 CDC 实例错开
server-time-zone: Asia/Shanghai
sink:
type: kafka
properties.bootstrap.servers: 10.0.0.6:9092
route:
- source-table: app.orders
sink-table: ods.orders_cdc # 目标端改名,避免与原表名混淆
pipeline:
name: mysql-to-kafka
parallelism: 2 # 并行度受源端表数量与库压力约束提交与运行状态
提交与运行状态
# 提交管道作业到 Flink
bin/flink-cdc.sh mysql-to-kafka.yaml
# 查看运行中的作业
flink list
# 关键日志:关注快照阶段进度与 binlog 位点是否推进
tail -f log/flink-*-taskexecutor-*.log | grep -i 'snapshot\|binlog'配置段落职责
| 段落 | 配置什么 | 常见坑 |
|---|---|---|
| source | 连接信息、表范围、server-id 区间 | server-id 与从库冲突,或表范围过宽 |
| sink | 目标类型与连接参数、写入语义 | 不同版本参数名有差异,需对照版本示例 |
| route | 源表到目标表的改名映射 | 映射遗漏导致部分表落到默认命名 |
| pipeline | 作业名、并行度、重启策略 | 并行度过高把源库读压力拉满 |
管道配置随版本演进,3.0 与 3.1 的 sink 参数存在差异;上线前按所用版本的官方示例逐项核对,不要直接套用别处的配置文件。
整库同步必须配置排除清单:业务库里的日志表、审计表、超大流水表按需排除,否则带宽、目标端存储与 Flink 状态都会被意外消耗。