You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

使用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-javamysql-connector-j
  • 排除低版本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

火山引擎 最新活动