从零到跑通:Flink CDC 安装教程与 MySQL 到 Doris 实时同步完整指南
【免费下载链接】flink-cdcFlink CDC is a streaming data integration tool项目地址: https://gitcode.com/GitHub_Trending/flin/flink-cdc
想把手里业务库的 MySQL 数据实时搬进数据仓库,传统做法是写 ETL 脚本加定时任务,"实时"二字基本指望不上。Flink CDC 是构建在 Apache Flink 之上的流式数据集成工具,用一个 YAML 文件就能让 MySQL 的每一次变更持续流向 Doris,全程不用写代码。
看懂 Flink CDC 能干什么
它本质上是把 CDC 数据同步这件事产品化:从数据库捕获变更事件,转换成数据流,再写入目标系统。
几个值得注意的能力点:
- 用声明式 YAML 定义源、目标、路由和转换,自动编译成 Flink 作业提交
- 支持整库同步、分库分表合并同步、表结构变更自动跟随(schema evolution)
上图是 Flink CDC 的分层结构:最上层是 YAML API,往下依次是连接器层、作业组装层和运行时层,底层跑在 Flink Runtime 上。
核对环境版本要求
动手前先对着检查清单过一遍:
- JDK 11 或更高(Flink CDC 3.6.0 起基于 JDK 11 构建),执行
java -version确认 - Apache Flink 1.20.x 或 2.2.x,且集群已能启动(Flink CDC 3.x 支持这两个大版本)
- 一台可达的 MySQL(含待同步的库表)和一套 Doris 集群
具体版本兼容矩阵以官方文档为准。
阶段一:解包 Flink CDC 发行包
从官网下载flink-cdc-x.x-bin.tar.gz并解压;如果拿不到官方包,也可以从 https://gitcode.com/GitHub_Trending/flin/flink-cdc 克隆仓库后用 Maven 自行构建(构建方式以官方文档为准)。
完成标志:你看到bin、lib、log、conf四个目录,bin里就有后面要用的flink-cdc.sh。
阶段二:把连接器 JAR 放进正确的 lib
这一步最容易踩坑,目录不能放错:
| JAR 包 | 放到哪里 |
|---|---|
| flink-cdc-pipeline-connector-mysql | Flink CDC 的lib |
| flink-cdc-pipeline-connector-doris | Flink CDC 的lib |
| mysql-connector-java | Flink 的lib(或用--jar参数传入) |
注意:前两个是放Flink CDC 的 lib,不是 Flink 的 lib,放错后作业起不来且报错指向"找不到类",排查起来很浪费时间。
完成标志:flink-cdc/lib下能看到两个 pipeline-connector 的 jar,Flink 的lib下有 mysql-connector-java。
阶段三:写一份 Flink CDC YAML 配置
创建mysql-to-doris.yaml,内容如下:
source: type: mysql hostname: localhost port: 3306 username: root password: 123456 tables: app_db.\.* server-id: 5400-5404 server-time-zone: UTC sink: type: doris fenodes: 127.0.0.1:8030 username: root password: "" table.create.properties.light_schema_change: true table.create.properties.replication_num: 1 pipeline: name: Sync MySQL Database to Doris parallelism: 2关键字段只记这几个就够:
source.tables:用正则匹配整库,app_db.\.*表示 app_db 下所有表server-id:binlog 拉取的服务器 ID 区间,要和集群里其他 CDC 任务错开server-time-zone:必须与 MySQL 实际时区一致,否则作业直接报错sink.fenodes:Doris FE 的 HTTP 地址replication_num: 1:示例环境只有一个 Doris BE 节点才这么写,生产环境按实际副本数调整
完成标志:YAML 校验无误,能看清"源 → 目标"两条线各对应哪个系统。
阶段四:提交同步作业
在 Flink CDC 目录下执行:
bash bin/flink-cdc.sh mysql-to-doris.yaml提交成功会返回类似Pipeline has been submitted to cluster.加一行 Job ID 的信息。
此时你应该看到:Flink Web UI 中有一个名为Sync MySQL Database to Doris的作业处于 RUNNING 状态。
阶段五:确认数据真的落地
Doris 连接器不支持自动建库,需要先在 Doris 里执行create database app_db;。
此时你应该看到:Doris Web UI 的app_db下出现orders等表,且已有初始数据。
接着做增量验证:在 MySQL 里对orders表做插入、更新、删除,甚至ALTER TABLE加一列,刷新 Doris 即可看到变更实时跟上来。若想让表结构变更自动跟随,可在pipeline块中配置schema.change.behavior: evolve(具体取值以官方文档为准)。
排查常见同步失败
| 现象 | 对策 |
|---|---|
| 作业起不来,提示找不到类 | 检查 connector jar 是否放错了 lib(CDC 的 lib 还是 Flink 的 lib) |
| 连接阶段报时区相关错误 | 把server-time-zone改成 MySQL 实际时区 |
| Doris 侧没有建表 | 手动预创建目标 database |
| 各参数含义拿不准 | 查 Doris 连接器文档 |
各字段的完整参数表可进一步参考 MySQL 到 Doris 快速上手文档。
跑通整条链路只是起点。下一步建议:在 YAML 里加一个transform块,对orders表加一条过滤条件再同步,亲眼看到数据在途中被加工——transform 和 route 的写法可查docs/content/docs/core-concept/transform.md。
【免费下载链接】flink-cdcFlink CDC is a streaming data integration tool项目地址: https://gitcode.com/GitHub_Trending/flin/flink-cdc
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考