当前位置: 代码网 > it编程>编程语言>Java > Flink: Could not find any factory for identifier kafka/jdbc/hive implements DynamicTableFactory 根治方法

Flink: Could not find any factory for identifier kafka/jdbc/hive implements DynamicTableFactory 根治方法

2024年08月04日 Java 我要评论
运行 Flink 应用或执行 Flink SQL 时会经常遇到下面的错误:org.apache.flink.table.api.ValidationException: Could not find any factory for identifier kafka jdbc hive hudi mysql-cdc that implements ‘org.apache.flink.table.factories.DynamicTableFactory’ in the classpath.

运行 flink 应用或执行 flink sql 时会经常遇到下面的错误:

其中 identifier 可以是 kafka, jdbc, hive, hudi 等等,并且这一问题往往有伴随着一种很“诡异”的表现:

  • 如果程序打包成 uber-jar,所有相关 connector jar 包的 class 都在里面,此问题一定会出现
  • 如果单独将相关 connector 的 jar 包部署到 ${flink_home}/lib 目录下,问题就不会出现

导致这一问题的根源并非相关 connector 的 jar 包没有添加到程序依赖中,或者在打成 uber-jar 的过程中丢失了 class 文件,而是因为一个更隐秘的原因:java 的 service provider interface (spi)机制

在 flink 的 table api & sql 框架下,各类 connector 和 format 需要提供 org.apache.flink.table.factories.dynamictablefactory 这一接口的具体实现,从而把自己“注册”或者说“嵌入”到 flink 运行环境中,而这需要在生成的 jar 包中往 meta-inf/services/目录下添加一个与接口类同名的文件,并

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com