开发者社区 > 大数据与机器学习 > 实时计算 Flink > 正文

Flink CDC连接器换成2.4.2之后,mysql作业一直报这个错,这要怎么解决?

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]

展开
收起
cuicuicuic 2023-11-30 15:38:26 136 0
3 条回答
写回答
取消 提交回答
  • 可以换成最新版试试,如果还不行,就得手动调整下打包顺序,flink cdc重写了很多debezium的同名类,也就是包名类名完全一样,但是实现代码不一致,如果加载的是debezium的类就会出现上面的异常,此回答整理自钉群“Flink CDC 社区”

    2023-11-30 20:44:40
    赞同 展开评论 打赏
  • 这个错误是由于Flink CDC连接器2.4.2与Antlr 4.x版本不兼容导致的。你可以尝试以下方法解决这个问题:

    1. 将Flink CDC连接器降级到2.3.x版本,因为Antlr 4.x与2.3.x版本是兼容的。你可以从Maven仓库下载并安装2.3.x版本的Flink CDC连接器。

    2. 如果不想降级Flink CDC连接器,你可以尝试修改Antlr 4.x的源代码,以解决NoSuchMethodError问题。具体操作如下:

      • 打开io.debezium.ddl.parser.mysql.generated.MySqlParser$DefaultValueContext.java文件。
      • 找到enterDefaultValue方法,将其签名更改为:
        public final void enterDefaultValue(MySqlParser.DefaultValueContext ctx) {
        
      • 保存文件并重新编译项目。
    2023-11-30 17:43:13
    赞同 展开评论 打赏
  • 面对过去,不要迷离;面对未来,不必彷徨;活在今天,你只要把自己完全展示给别人看。

    出现 "java.lang.NoSuchMethodError" 错误通常表示在运行时找不到方法的定义。根据您提供的错误信息,该错误是由于缺少 org.antlr.v4.runtime.tree.TerminalNode 类中的 NULL_LITERAL() 方法导致的。

    这种问题通常是由于版本不匹配或依赖冲突引起的。可能有以下几个解决方案:

    1. 检查依赖版本:确保您所使用的 Flink CDC 连接器和其他相关库的版本是兼容的。请确认是否存在版本不匹配的情况,特别是与 org.antlr.v4.runtime 相关的库。可以尝试将所有库的版本升级到兼容的最新版本,并确保它们之间没有冲突。

    2. 检查连接器配置:检查您的 Flink CDC 连接器配置是否正确并完整。确保您提供的连接器配置与所使用的连接器版本相匹配,并且没有遗漏任何必要的配置。

    3. 清理缓存:如果您在更新连接器版本后仍然遇到此问题,可能是因为旧版本的连接器已被缓存而未清除。尝试清除应用程序的缓存(如 Maven 或 Gradle 的本地缓存),然后重新构建和部署应用程序。

    2023-11-30 16:07:25
    赞同 展开评论 打赏

实时计算Flink版是阿里云提供的全托管Serverless Flink云服务,基于 Apache Flink 构建的企业级、高性能实时大数据处理系统。提供全托管版 Flink 集群和引擎,提高作业开发运维效率。

相关产品

  • 实时计算 Flink版
  • 相关电子书

    更多
    搭建电商项目架构连接MySQL 立即下载
    搭建4层电商项目架构,实战连接MySQL 立即下载
    PolarDB MySQL引擎重磅功能及产品能力盛大发布 立即下载

    相关镜像