Apache nifi ControllerServiceInstallationException尝试将NiFi从1.5.0升级到1.8.0

Apache nifi ControllerServiceInstallationException尝试将NiFi从1.5.0升级到1.8.0,apache-nifi,Apache Nifi,我正在尝试将NiFi从1.5.0升级到1.8.0 使用默认flow.xml.gz时,升级将成功启动。但是,当1.5.0中的flow.xml.gz替换conf目录中1.8.0中的默认值时,日志中会出现大量类似的ControllerServiceInstanceException异常。其中第一项是: 2019-01-24 14:39:20,714 ERROR [main] o.a.n.c.s.StandardControllerServiceProvider Could not create Con

我正在尝试将NiFi从1.5.0升级到1.8.0

使用默认flow.xml.gz时,升级将成功启动。但是,当1.5.0中的flow.xml.gz替换conf目录中1.8.0中的默认值时,日志中会出现大量类似的ControllerServiceInstanceException异常。其中第一项是:

2019-01-24 14:39:20,714 ERROR [main] o.a.n.c.s.StandardControllerServiceProvider Could not create Controller Service of type org.apache.nifi.ssl.StandardSSLContextService for ID e7800100-015d-1000-7210-d5961d784f27; creating "Ghost" implementation
org.apache.nifi.controller.exception.ControllerServiceInstantiationException: Unable to find bundle for coordinate org.apache.nifi:nifi-ssl-context-service-nar:1.5.0
    at org.apache.nifi.controller.service.StandardControllerServiceProvider.createControllerService(StandardControllerServiceProvider.java:126)
    at org.apache.nifi.controller.FlowController.createControllerService(FlowController.java:3869)
    at org.apache.nifi.controller.service.ControllerServiceLoader.createControllerService(ControllerServiceLoader.java:207)
...
解包flow.xml.gz时,有一个标准的SSLContextService配置,它引用了1.5.0版:

<controllerService>
        <id>eae39ebf-6d70-34db-aafd-bcbe66eead6f</id>
        <name>StandardSSLContextService</name>
        <comment/>
        <class>org.apache.nifi.ssl.StandardSSLContextService</class>
        <bundle>
          <group>org.apache.nifi</group>
          <artifact>nifi-ssl-context-service-nar</artifact>
          <version>1.5.0</version>
        </bundle>
        <enabled>false</enabled>
        <property>
          <name>Keystore Filename</name>
          <value>/opt/cermt-processor/templates/twlserver.jks</value>
        </property>
        <property>
          <name>Keystore Password</name>
        </property>
        <property>
          <name>key-password</name>
        </property>
        <property>
          <name>Keystore Type</name>
          <value>JKS</value>
        </property>
        <property>
          <name>Truststore Filename</name>
          <value>/opt/cermt-processor/templates/truststore.jks</value>
        </property>
        <property>
          <name>Truststore Password</name>
        </property>
        <property>
          <name>Truststore Type</name>
          <value>JKS</value>
        </property>
        <property>
          <name>SSL Protocol</name>
          <value>TLS</value>
        </property>
      </controllerService>
这有区别吗?根据升级文档,1.5.0中的flow.xml.gz应该向后兼容1.8.0


修复此问题的建议?谢谢

apachenifi确实在努力实现向后兼容。这意味着在一个版本中设计的流应该在下一个次要版本中无缝工作。有两种类型和附加类型

问题在于,您现有的
flow.xml.gz
文件引用了
standardslcontextservice
控制器服务的1.5.0版本。如果部署在1.8.0(默认)实例上,则该控制器服务实现不存在(1.8.0版本不存在)。您可以通过以下几种方式解决此问题:

  • 手动编辑
    flow.xml.gz
    文件,通过更改xml值来引用控制器服务(和其他组件)的1.8.0版本。请注意,某些组件可能在版本之间添加/更改了属性
  • 将包含这些组件的1.5.0 NAR(NiFi存档)添加到1.8.0实例
    lib/
    。NiFi可以运行同一组件的多个版本,以允许逐段迁移。布莱恩对这件事很生气。两个版本都可用时,应该正确部署现有流,并且可以通过UI在画布上更改组件的版本

Apache NiFi确实在努力实现向后兼容。这意味着在一个版本中设计的流应该在下一个次要版本中无缝工作。有两种类型和附加类型

问题在于,您现有的
flow.xml.gz
文件引用了
standardslcontextservice
控制器服务的1.5.0版本。如果部署在1.8.0(默认)实例上,则该控制器服务实现不存在(1.8.0版本不存在)。您可以通过以下几种方式解决此问题:

  • 手动编辑
    flow.xml.gz
    文件,通过更改xml值来引用控制器服务(和其他组件)的1.8.0版本。请注意,某些组件可能在版本之间添加/更改了属性
  • 将包含这些组件的1.5.0 NAR(NiFi存档)添加到1.8.0实例
    lib/
    。NiFi可以运行同一组件的多个版本,以允许逐段迁移。布莱恩对这件事很生气。两个版本都可用时,应该正确部署现有流,并且可以通过UI在画布上更改组件的版本

启动期间的逻辑应如下所示:

A) 如果flow.xml请求版本X(1.5.0),并且该版本存在,那么您将获得该版本

B) 如果flow.xml请求版本X(1.5.0),但它不存在,但存在其他版本Y,并且它是唯一具有相同group+工件的版本,那么您将自动获得该版本

C) 如果flow.xml请求版本X(1.5.0),但它不存在,并且存在另外两个版本Y和Z,那么您将得到一个重影组件,因为系统无法为您选择

因此,像您这样的普通升级应该属于案例B,它应该为您自动升级

可能会再次检查lib目录是否没有两个版本的nifissl上下文服务nar,可能会尝试清除工作目录,以确保所有nar都重新解包


我认为这无关紧要,但我也注意到在您的异常中,服务ID与您从flow.xml中显示的代码片段中的服务ID不同。我假设该服务也有1.5.0捆绑包,但对verift来说会很好。

启动期间的逻辑应如下所示:

A) 如果flow.xml请求版本X(1.5.0),并且该版本存在,那么您将获得该版本

B) 如果flow.xml请求版本X(1.5.0),但它不存在,但存在其他版本Y,并且它是唯一具有相同group+工件的版本,那么您将自动获得该版本

C) 如果flow.xml请求版本X(1.5.0),但它不存在,并且存在另外两个版本Y和Z,那么您将得到一个重影组件,因为系统无法为您选择

因此,像您这样的普通升级应该属于案例B,它应该为您自动升级

可能会再次检查lib目录是否没有两个版本的nifissl上下文服务nar,可能会尝试清除工作目录,以确保所有nar都重新解包


我认为这无关紧要,但我也注意到在您的异常中,服务ID与您从flow.xml中显示的代码片段中的服务ID不同。我假设该服务也有1.5.0捆绑包,但对verift来说会很好。

手动编辑flow.xml.gz以参考1.8.0可以消除这些异常。感谢Andy。手动编辑flow.xml.gz以引用1.8.0可以消除这些异常。谢谢你,安迪。
drwxr-xr-x 4 root root 4096 Jan 24 13:14 nifi-ssl-context-service-nar-1.8.0.nar-unpacked