Flink CDC MySQL 表字段定义为 decimal 输出乱码问题优雅解决方式
Flink CDC MySQL 表字段定义为 decimal 输出乱码问题解析
代码运行环境
Flink 1.15 + FlinkCDC 2.4.0 + jdk1.8 +springboot 2.3
1、原因分析
Flink CDC 底层使用 Debezium 连接器来捕获 MySQL 的数据变更。当 MySQL 表中的字段类型为 decimal 时,Debezium 默认会将 decimal 类型的数据转换为二进制格式(java.math.BigDecimal
)进行传输。然而,在 Flink 中,如果直接使用默认的反序列化方式,可能会导致 decimal 数据无法正确解析,从而出现乱码问题。这是由于 Flink 和 Debezium 在处理 decimal 类型数据时的格式不完全兼容所导致的。
2、解决方案
使用 JsonDebeziumDeserializationSchema
自定义转换规则参数 Map<String, Object> customConverterConfigs
configs.put("decimal.format",