Flink CDC连接器换成2.4.2之后,mysql作业一直报这个错,这要怎么解决?Caused by: java.lang.NoSuchMethodError: 'org.antlr.v4.runtime.tree.TerminalNode io.debezium.ddl.parser.mysql.generated.MySqlParser$DefaultValueContext.NULL_LITERAL()'
at io.debezium.connector.mysql.antlr.listener.DefaultValueParserListener.enterDefaultValue(DefaultValueParserListener.java:40) ~[flink-connector-mysql-cdc-2.4.2.jar:2.4.2]
at io.debezium.ddl.parser.mysql.generated.MySqlParser$DefaultValueContext.enterRule(MySqlParser.java:56584) ~[flink-sql-connector-mysql-cdc-2.4.2.jar:2.4.2]
at io.debezium.antlr.ProxyParseTreeListenerUtil.delegateEnterRule(ProxyParseTreeListenerUtil.java:46) ~[flink-sql-connector-mysql-cdc-2.4.2.jar:2.4.2]
at io.debezium.connector.mysql.antlr.listener.MySqlAntlrDdlParserListener.enterEveryRule(MySqlAntlrDdlParserListener.java:89) ~[flink-sql-connector-mysql-cdc-2.4.2.jar:2.4.2]
at com.ververica.cdc.connectors.shaded.org.antlr.v4.runtime.tree.ParseTreeWalker.enterRule(ParseTreeWalker.java:41) ~[flink-sql-connector-mysql-cdc-2.4.2.jar:2.4.2]
可以换成最新版试试,如果还不行,就得手动调整下打包顺序,flink cdc重写了很多debezium的同名类,也就是包名类名完全一样,但是实现代码不一致,如果加载的是debezium的类就会出现上面的异常,此回答整理自钉群“Flink CDC 社区”
这个错误是由于Flink CDC连接器2.4.2与Antlr 4.x版本不兼容导致的。你可以尝试以下方法解决这个问题:
将Flink CDC连接器降级到2.3.x版本,因为Antlr 4.x与2.3.x版本是兼容的。你可以从Maven仓库下载并安装2.3.x版本的Flink CDC连接器。
如果不想降级Flink CDC连接器,你可以尝试修改Antlr 4.x的源代码,以解决NoSuchMethodError
问题。具体操作如下:
io.debezium.ddl.parser.mysql.generated.MySqlParser$DefaultValueContext.java
文件。enterDefaultValue
方法,将其签名更改为:public final void enterDefaultValue(MySqlParser.DefaultValueContext ctx) {
出现 "java.lang.NoSuchMethodError" 错误通常表示在运行时找不到方法的定义。根据您提供的错误信息,该错误是由于缺少 org.antlr.v4.runtime.tree.TerminalNode
类中的 NULL_LITERAL()
方法导致的。
这种问题通常是由于版本不匹配或依赖冲突引起的。可能有以下几个解决方案:
检查依赖版本:确保您所使用的 Flink CDC 连接器和其他相关库的版本是兼容的。请确认是否存在版本不匹配的情况,特别是与 org.antlr.v4.runtime
相关的库。可以尝试将所有库的版本升级到兼容的最新版本,并确保它们之间没有冲突。
检查连接器配置:检查您的 Flink CDC 连接器配置是否正确并完整。确保您提供的连接器配置与所使用的连接器版本相匹配,并且没有遗漏任何必要的配置。
清理缓存:如果您在更新连接器版本后仍然遇到此问题,可能是因为旧版本的连接器已被缓存而未清除。尝试清除应用程序的缓存(如 Maven 或 Gradle 的本地缓存),然后重新构建和部署应用程序。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
实时计算Flink版是阿里云提供的全托管Serverless Flink云服务,基于 Apache Flink 构建的企业级、高性能实时大数据处理系统。提供全托管版 Flink 集群和引擎,提高作业开发运维效率。