java.lang.NoSuchMethodError: io.debezium.connector.mysql.MySqlConnection$MySqlConnectionConfiguratio

版本:MySQL CDC 2.4

参考:[Bug] update flink version to 1.16.2and CDC version to 2.3.0:NoSuchMethodError · Issue #2340 · ververica/flink-cdc-connectors · GitHub

原因:内部jar包-> CDC 2.4和对应的debezium-connector-mysql-1.9.7.Final.jar 都存在MySqlConnectionConfiguration类,其构造参数不一致,导致无法正确初始化示例对象,其错误来源内部jar包,需要更改源码。

根本原因是[[mysql] add custom jdbc properties to debezium mysql connection (#674) by ruanhang1993 · Pull Request #1217 · ververica/flink-cdc-connectors · GitHub]提交修改后的类名已有类名冲突,可根据[fix review · ververica/flink-cdc-connectors@5415bcf · GitHub]提交差异修改源码还原类名,然后重新打包,已对此问题进行提问:java.lang.NoSuchMethodError: io.debezium.connector.mysql.MySqlConnection$MySqlConnectionConfiguration.(Lio/debezium/config/Configuration;Ljava/util/Properties;)V · Issue #2423 · ververica/flink-cdc-connectors · GitHub

Caused by: java.lang.NoSuchMethodError: io.debezium.connector.mysql.MySqlConnection$MySqlConnectionConfiguration.<init>(Lio/debezium/config/Configuration;Ljava/util/Properties;)V
    at com.ververica.cdc.connectors.mysql.debezium.DebeziumUtils.createMySqlConnection(DebeziumUtils.java:85)
    at com.ververica.cdc.connectors.mysql.debezium.DebeziumUtils.createMySqlConnection(DebeziumUtils.java:78)
    at com.ververica.cdc.connectors.mysql.source.reader.MySqlSplitReader.getSnapshotSplitReader(MySqlSplitReader.java:229)
    at com.ververica.cdc.connectors.mysql.source.reader.MySqlSplitReader.pollSplitRecords(MySqlSplitReader.java:113)
    at com.ververica.cdc.connectors.mysql.source.reader.MySqlSplitReader.fetch(MySqlSplitReader.java:80)
    at org.apache.flink.connector.base.source.reader.fetcher.FetchTask.run(FetchTask.java:58)
    at org.apache.flink.connector.base.source.reader.fetcher.SplitFetcher.runOnce(SplitFetcher.java:142)
    at org.apache.flink.connector.base.source.reader.fetcher.SplitFetcher.run(SplitFetcher.java:105)
    at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
    at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
    ... 1 more

解决办法:下载对应版本 cdc 分支代码,自行打包,此时打包是一个fat jar 包,其包含依赖jar包。

仓库地址:GitHub - ververica/flink-cdc-connectors: CDC Connectors for Apache Flink®

参考:Java 打包 FatJar 方法小结 - 知乎

在 jar 包里嵌套其他 jar,这个方法可以彻底避免解压同名覆盖的问题,但是这个方法不被 JVM 原生支持,因为JDK提供的 ClassLoader仅支持装载嵌套 jar 包的 class 文件。所以这种方法需要自定义 ClassLoader以支持嵌套 jar。

cdc以及依赖jar放置同一个jar包,这样 引用环境不需要使用maven加载对应cdc相关jar包,应用环境和flink 环境平台仅放置对应的flink-sql-connector-mysql-cdc-${版本号} 的jar包即可,仅限cdc

  • 18
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值