版本:MySQL
CDC 2.4
原因:内部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®
在 jar 包里嵌套其他 jar,这个方法可以彻底避免解压同名覆盖的问题,但是这个方法不被 JVM
原生支持,因为JDK
提供的 ClassLoader
仅支持装载嵌套 jar 包的 class 文件。所以这种方法需要自定义 ClassLoader
以支持嵌套 jar。
将cdc
以及依赖jar放置同一个jar包,这样 引用环境不需要使用maven加载对应cdc
相关jar包,应用环境和flink
环境平台仅放置对应的flink-sql-connector-mysql-cdc-${版本号}
的jar包即可,仅限cdc
。