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",