注册

Flink CDC 增量同步时 DOUBLE/DOUBLE PRECISION 精度丢失,LogMiner SQL_REDO 中已是截断值

CCSHISHI 2026/05/27 284 0

【问题标题】Flink CDC 增量同步时 DOUBLE/DOUBLE PRECISION 精度丢失,LogMiner SQL_REDO 中已是截断值

【环境信息】

  • DM 版本:

SELECT ***** FROM V$VERSION;

DM Database Server 64 V8
DB Version: 0x7000c
03134284294-20241009-244896-20119
Msg Version: 21
Gsu level(5) cnt: 0

  • Flink 版本:1.17.0
  • Flink CDC 版本:2.4.1
  • 连接器:flink-connector-dm-cdc-2.4.1.jar
  • 同步模式:initial(全量+增量)

【现象描述】
源表 DOUBLE / DOUBLE PRECISION 列在增量变更(op=c)时精度丢失约 6 位小数;全量 snapshot(op=r)正常。

示例:

  • INSERT:col_double = 3.141592653589793,col_double_precision = 2.718281828459045
  • 源表 SELECT:值为完整精度
  • Kafka 增量消息:col_double = 3.141593
  • 目标 MySQL:与 Kafka 一致,为 3.141593

同一条数据中 NUMBER/DECIMAL 列(如 col_number_default = 1234567890.123456)增量同步正常。

【排查结论】
已排除下游 Sink 截断。问题出在 LogMiner 生成的 SQL_REDO:

  1. 通过 DBMS_LOGMNR 查询 V$LOGMNR_CONTENTS,SCN=XXX 的 INSERT 记录中:
    SQL_REDO 里 col_double 已是 3.141593(非 3.141592653589793)
    col_number_default 为 1234567890.123456(完整)

  2. Flink CDC 底层即解析 SQL_REDO,
    因此 connector 只能得到 redo 里已有的截断值。

【请教】

  1. LogMiner SQL_REDO 对 DOUBLE 列格式化为约 6 位小数是否为预期行为?是否有参数可保留完整精度?

感谢解答!

回答 0
暂无回答
扫一扫
联系客服