You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flink1.15集群运行jar报错:多个'default'标识ExecutorFactory实现冲突

问题产生原因
  • Flink 1.15集群的lib目录下已经预置了Table模块相关核心组件,其中包含org.apache.flink.table.planner.loader.DelegateExecutorFactory这个ExecutorFactory实现类。
  • 当前Maven配置未将flink-table-planner_2.12、flink-table-runtime等Flink内置核心依赖设置为provided作用域,使用shade插件打胖包时,会将这些依赖中携带的org.apache.flink.table.planner.delegation.DefaultExecutorFactory类一并打包进业务JAR。
  • 业务JAR提交到集群运行时,类加载器通过SPI机制扫描Factory实现时,会同时发现集群内置的Factory和业务JAR内自带的同标识Factory,两个实现类冲突就会抛出该歧义异常。
  • 本地IDE运行时不存在集群预置的Flink组件,仅加载POM中引入的依赖,因此不会触发该冲突。
解决方法

按照以下步骤调整POM配置后重新打包即可:

  1. 为所有Flink集群内置的核心依赖添加<scope>provided</scope>配置,让这类依赖仅参与本地编译、IDE运行阶段,不会被打包进业务胖JAR。需要调整的依赖包括:

    • 核心依赖:flink-streaming-java、flink-clients
    • Table相关依赖:flink-table-api-java-bridge、flink-table-api-scala-bridge_2.12、flink-table-runtime、flink-table-planner_2.12、flink-connector-files、flink-csv

    调整后的依赖示例:

    <!-- Flink 核心依赖 -->
    <dependency>
        <groupId>org.apache.flink</groupId>
        <artifactId>flink-streaming-java</artifactId>
        <version>${flink.version}</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>org.apache.flink</groupId>
        <artifactId>flink-clients</artifactId>
        <version>${flink.version}</version>
        <scope>provided</scope>
    </dependency>
    
    <!-- Flink Table 相关依赖 -->
    <dependency>
        <groupId>org.apache.flink</groupId>
        <artifactId>flink-table-api-java-bridge</artifactId>
        <version>${flink.version}</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>org.apache.flink</groupId>
        <artifactId>flink-table-api-scala-bridge_2.12</artifactId>
        <version>${flink.version}</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>org.apache.flink</groupId>
        <artifactId>flink-table-runtime</artifactId>
        <version>${flink.version}</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>org.apache.flink</groupId>
        <artifactId>flink-table-planner_2.12</artifactId>
        <version>${flink.version}</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>org.apache.flink</groupId>
        <artifactId>flink-connector-files</artifactId>
        <version>${flink.version}</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>org.apache.flink</groupId>
        <artifactId>flink-csv</artifactId>
        <version>${flink.version}</version>
        <scope>provided</scope>
    </dependency>
    
  2. 保留非集群内置依赖的默认compile作用域,这类依赖会被正常打进胖JAR,包括:flink-connector-kafka、kafka-clients、jackson-databind、org.json等第三方工具、连接器依赖。

  3. 执行mvn clean package命令清理旧构建产物,重新生成业务JAR包后提交到集群即可正常运行。

注意:如果使用的Flink发行版没有内置Kafka连接器,flink-connector-kafka和对应版本的kafka-clients需要保留compile作用域打进JAR,否则会报类找不到错误。

内容的提问来源于stack exchange,提问作者user1112259

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 08:48:31