使用Flink CDC(flink-doris-connector)同步MySQL到Doris触发NoSuchMethodError报错
解决Flink同步MySQL到Doris时Debezium相关的NoSuchMethodError错误
这个错误是依赖版本冲突导致的:com.mysql.cj.CharsetMapping.getStaticJavaEncodingForMysqlCharset方法仅存在于较高版本的mysql驱动(mysql-connector-java 8.0.23及以上,新版本artifactId为mysql-connector-j)中,你的作业里大概率同时引入了多个版本的mysql驱动,低版本驱动覆盖了高版本,导致Debezium连接器找不到该方法。
解决步骤:
排查依赖树,定位冲突版本:
- Maven项目执行命令:
mvn dependency:tree | grep mysql - Gradle项目执行命令:
./gradlew dependencies | grep mysql
查看输出是否存在多个版本的mysql-connector-java或mysql-connector-j。
- Maven项目执行命令:
排除低版本mysql驱动:
在项目依赖配置中,给flink-doris-connector添加排除规则,移除它自带的低版本mysql驱动。比如Maven的pom.xml配置:<dependency> <groupId>org.apache.doris</groupId> <artifactId>flink-doris-connector-1.17_2.12</artifactId> <version>1.2.7</version> <exclusions> <exclusion> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </exclusion> </exclusions> </dependency>显式引入兼容版本的mysql驱动:
根据你使用的Debezium版本,引入对应兼容的mysql驱动(建议8.0.28及以上,适配Debezium 1.9+版本):<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-j</artifactId> <version>8.0.33</version> <scope>provided</scope> <!-- 若Flink集群已部署该驱动,可设为provided;否则移除该属性 --> </dependency>重新打包作业并提交到Flink集群,验证错误是否消除。
内容的提问来源于stack exchange,提问作者Michael




