说明:Flink CDC 底层基于 Debezium,下面是自动映射规则;Flink DECIMAL 最大精度 38,MySQL DECIMAL 最高 65,超过 38 必须手动映射 STRING 防丢精度Apache InL...
1. 整数类型
2. 浮点 & 高精度小数
3. 时间日期(最容易时区踩坑)
✅ 重点:MySQL
TIMESTAMP映射为TIMESTAMP_LTZ;DATETIME映射普通TIMESTAMP(不带时区),同步时时区参数必须对齐阿里云帮助...
4. 字符串、二进制、文本
5. 枚举、集合、JSON、空间类型
高频踩坑清单(生产必看)
BIGINT UNSIGNED → DECIMAL(20,0),如果下游是 Doris/ClickHouse,DDL 不要写 BIGINT,会溢出报错
TINYINT (1) 默认转 BOOLEAN,业务存 0/1 标识、不想转布尔:
source:
connector: mysql-cdc
treat-tinyint1-as-boolean: false
TIMESTAMP_LTZ 时区问题:source 配置
server-time-zone: Asia/Shanghai,否则时间偏移 8 小时DECIMAL 精度 > 38,自动映射会报错,需要在 Flink DDL 显式定义为 STRING
MySQL JSON 只是 STRING,查询时需要
JSON_VALUE(json_col, '$.xx')解析,Flink SQL 有 JSON 函数支持SET 类型映射 ARRAY,写入很多下游库(如 MySQL、Doris)不支持数组,需要额外拆分
示例 Flink CDC Source DDL(对照映射)
CREATE TABLE mysql_source (
id BIGINT,
u_bigint DECIMAL(20,0), -- bigint unsigned
status BOOLEAN, -- tinyint(1)
dt TIMESTAMP(3), -- datetime(3)
ts TIMESTAMP_LTZ(3), -- mysql timestamp(3)
price DECIMAL(18,2),
tags ARRAY<STRING>, -- set('a','b')
ext STRING, -- json
PRIMARY KEY(id) NOT ENFORCED
) WITH (
'connector' = 'mysql-cdc',
'hostname' = '127.0.0.1',
'port' = '3306',
'username' = 'root',
'password' = 'xxx',
'database-name' = 'test_db',
'table-name' = 't_test',
'server-time-zone' = 'Asia/Shanghai'
);