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

Apache NiFi自定义组件依赖冲突与控制器服务共享问题咨询

问题核心原因

两个问题均由错误的NAR依赖配置触发,违反了NiFi的NAR类加载隔离规则:

  • NAR之间通过父类加载器继承实现依赖共享,而非直接引入NAR依赖,直接引入会将依赖NAR的所有类打包进当前NAR,导致构件重复
  • 控制器服务的实现类只能存在于独立的服务NAR中,不能传递到处理器NAR的依赖树中,否则每个包含服务实现的NAR都会生成独立的服务bundle,无法跨处理器共享
具体解决方案

1. 修正NAR父加载器配置,解决标准构件重复

不要在处理器NAR的pom.xml中直接添加nifi-standard-services-api-nar的依赖,而是通过nar-maven-plugin的<narParent>配置继承父NAR的类加载器,配置示例如下:

<!-- 所有自定义NAR(处理器NAR、服务NAR)的pom.xml都添加该插件配置 -->
<plugin>
    <groupId>org.apache.nifi</groupId>
    <artifactId>nar-maven-plugin</artifactId>
    <version>匹配你使用的NiFi版本号</version>
    <extensions>true</extensions>
    <configuration>
        <!-- 该配置代替直接引入nifi-standard-services-api-nar依赖 -->
        <narParent>
            <groupId>org.apache.nifi</groupId>
            <artifactId>nifi-standard-services-api-nar</artifactId>
            <version>匹配你使用的NiFi版本号</version>
        </narParent>
    </configuration>
</plugin>

移除两个处理器NAR pom.xml中直接声明的nifi-standard-services-api-nar依赖,后续构建不会再报文档生成错误,也不会将标准构件打包进自定义处理器NAR,彻底解决重复问题。

2. 拆分服务API与实现,禁止服务实现传递到处理器NAR

你当前的依赖结构必然是处理器直接依赖了CustomCacheService的实现包,导致服务实现被打进处理器NAR,按以下规则拆分模块:

  • 新增customcacheservice-api模块(打包类型jar):仅存放CustomCacheService的接口定义,无任何实现代码
  • 原customcacheservice实现模块(打包类型jar):仅依赖上面的api模块,存放服务实现代码
  • customcacheservice-nar模块:仅依赖服务实现jar,打包成独立的服务NAR
  • 两个处理器的jar模块:仅依赖customcacheservice-api模块,且依赖范围设为provided,绝对不能引入服务实现的依赖
  • 两个处理器的NAR模块:不需要引入任何服务相关的依赖,仅依赖自身的处理器jar模块即可

3. 部署验证

部署时将三个NAR同时放到NiFi的lib目录:

  • customcacheservice-nar-1.0.0-SNAPSHOT.nar
  • querycustomcache-nar-1.0.0-SNAPSHOT.nar
  • loadcustomcache-nar-1.0.0-SNAPSHOT.nar

重启NiFi后:

  • 标准构件只会出现官方bundle的一份,无重复条目
  • 服务列表仅会出现1个com.example.service.customcacheservice bundle下的CustomCacheService,两个处理器都可以识别并共享该服务的同一个实例

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 06:45:02