欢迎光临
我们一直在努力

标题:Flink1.17 读取MySQL CDC(Debezium)实战踩坑记录

标签:Flink、Debezium、CDC、实时同步、大数据 专栏:Flink 实战

一、前言

最近做实时数仓,需要把 MySQL 的数据变更实时同步到 Flink 做流处理,选用Flink CDC + Debezium方案。部署过程踩了几个坑,包括版本依赖冲突、连接超时、binlog 没开启等问题,整理完整可复现的步骤,方便大家直接参考。

环境版本说明(版本不匹配是 90% 报错根源!)

  • Flink:1.17.2
  • MySQL:8.0
  • Flink CDC connector:2.4.0
  • JDK:1.8
  • 操作系统:CentOS7

二、前置准备

1. MySQL 开启 binlog

修改my.cnf配置

[mysqld]
server-id=1
log-bin=mysql-bin
binlog_format=ROW
expire_logs_days=7

修改完成重启 MySQL。

验证命令

show variables like 'log_bin';
show variables like 'binlog_format';

输出 ON 和 ROW 才算成功。

2. 创建 CDC 专用账号,授予权限

CREATE USER flink_cdc@'%' IDENTIFIED BY '123456';
GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO flink_cdc@'%';
FLUSH PRIVILEGES;

三、Flink SQL 建表语句

将 MySQL 订单表映射为 Flink CDC 表,捕获增删改:

CREATE TABLE mysql_order_cdc (
id INT,
order_no STRING,
amount DECIMAL(10,2),
create_time TIMESTAMP(3),
PRIMARY KEY (id) NOT ENFORCED
) WITH (
'connector' = 'mysql-cdc',
'hostname' = '127.0.0.1',
'port' = '3306',
'username' = 'flink_cdc',
'password' = '123456',
'database-name' = 'test_db',
'table-name' = 't_order',
'server-time-zone' = 'Asia/Shanghai'
);

测试查询

SELECT * FROM mysql_order_cdc;

启动任务后,在 MySQL 中修改 t_order 表的数据,Flink 控制台会实时捕获变更数据。

四、踩坑记录 & 解决方案(重点)

坑 1:Timezone 时区异常 The server time zone value 'XXX' is unrecognized

原因:没有指定时区参数 ✅解决:增加'server-time-zone' = 'Asia/Shanghai'

坑 2:Cannot read binlog, Missing REPLICATION SLAVE privilege

原因:数据库账号缺少复制权限 ✅解决:执行上面的 GRANT 授权语句,刷新权限

坑 3:依赖包冲突,NoClassDefFoundError

原因:Flink CDC 的 jar 包版本和 Flink 版本不匹配 ✅解决:下载flink-connector-mysql-cdc-2.4.0.jar放到flink/lib目录,注意 Flink1.17 只能用 2.4.x 系列 cdc,不能用更高版本。

坑 4:读取全量快照时任务 OOM

✅解决:

  • 调大 TaskManager 内存
  • 增加'scan.snapshot.fetch.size' = '1024',分批拉取快照数据
  • 五、补充说明

  • binlog 模式必须是 ROW,STATEMENT 模式无法捕获行级变更;
  • 表必须有主键,CDC 连接器依赖主键做快照合并;
  • 生产环境不要直接使用 root 账号做 CDC 同步,遵循最小权限原则。
  • 六、总结

    Flink CDC 可以很方便实现 MySQL 的实时数据捕获,不用单独部署 Debezium 服务。版本对齐、binlog 开启、账号权限、时区这四点是最容易踩坑的地方。 测试阶段先小表验证,确认全量读取 + 增量捕获正常后,再迁移到生产环境。


    CSDN 发布设置建议 分类专栏:Flink 实战 标签:Flink Debezium CDC 实时计算 大数据 原创 ✅

    赞(0)
    未经允许不得转载:171主机测评 » 标题:Flink1.17 读取MySQL CDC(Debezium)实战踩坑记录
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址