当前位置: 首页 > 图灵资讯 > 技术篇> Flink CDC Connector读取MySQL二进制主键导致任务失败怎么办?

Flink CDC Connector读取MySQL二进制主键导致任务失败怎么办?

来源:图灵教育
时间:2025-03-14 16:32:32

flink cdc connector读取mysql二进制主键,导致任务失败

本文将讨论使用情况 apache flink cdc connector (版本 2.1.1) 读取 mysql 数据中遇到的问题。问题来源于 mysql 表的主键采用二进制格式,导致 flink 任务失败,抛出异常。

问题描述:

在使用 flink-connector-mysql-cdc 2.1.1 监听 mysql 如果是数据库 mysql 表的主键是二进制类型,会遇到以下错误:

[pool-79-thread-1] INFO io.debezium.jdbc.JdbcConnection - Connection gracefully closed
[SourceCoordinator-Source: MySQL Source -> Sink: Print to Std. Out] ERROR org.apache.flink.runtime.source.coordinator.SourceCoordinator - Uncaught exception in the SplitEnumerator for Source Source: MySQL Source -> Sink: Print to Std. Out while handling operator event RequestSplitEvent (host='') from subtask 0. Triggering job failover.
org.apache.flink.util.FlinkRuntimeException: Generate Splits for table 。。。。 error
    ...
Caused by: java.lang.ClassCastException: [B cannot be cast to java.lang.Comparable
    ...

异常信息显示在 chunksplitter 的 generatesplits 这种方法发生了 classcastexception,根本原因是 [b (byte数组) 无法转换为 java.lang.comparable 由于数据分片过程中通常会出现接口。 chunksplitter 为了划分数据块,需要比较主键。由于主键是二进制类型,不能直接比较,从而导致类型转换异常。 这不是反序列问题,而是数据分片阶段的类型兼容性问题。

问题解决:

根据用户反馈,这个问题已经存在了 flink cdc connector 的 github 仓库被报告,最终升级到更新 flink cdc connector 版本解决。 问题的根本原因是conector早期版本在处理二进制主键类型的分片逻辑上存在缺陷。 这个错误可以通过升级到修复这个问题的版本来避免。

以上是Flink CDC 如果Conector读取MySQL二进制的关键导致任务失败怎么办?详情请关注图灵教育的其他相关文章!