我正在尝试将NiFi从1.5.0升级到1.8.0。
使用默认的flow.xml.gz时,升级成功启动。但是,当1.5.0中的flow.xml.gz替换conf目录中1.8.0中的默认值时,日志中会出现许多类似的ControllerServiceInstantiationException异常。其中第一个是:
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,有StandardSSLContextService配置,它引用版本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>
在work / nar / extensions中有以下目录:
drwxr-xr-x 4 root root 4096 Jan 24 13:14 nifi-ssl-context-service-nar-1.8.0.nar-unpacked
有什么不同吗?根据升级文档,从1.5.0开始的flow.xml.gz应该向后兼容1.8.0。
建议解决此问题?谢谢。
答案 0 :(得分:3)
启动期间的逻辑应为:
A)如果flow.xml要求提供版本X(1.5.0)并且该版本存在,那么您将获得该版本
B)如果flow.xml要求提供版本X(1.5.0),但该版本不存在,但存在其他版本Y,并且它是唯一具有相同group + artifact的版本,那么您将自动获得该版本版本
C)如果flow.xml要求提供版本X(1.5.0),但该版本不存在,并且存在其他两个版本Y和Z,则您会得到一个虚假组件,因为系统无法为您选择
因此,像您这样的正常升级应该属于情况B,它会为您自动升级。
也许要再次检查lib目录是否没有nifi-ssl-context-service-nar的两个版本,并尝试删除工作目录以确保所有NAR都重新打包。
我认为这无关紧要,但是在您的异常情况下,我也注意到服务ID与您从flow.xml中显示的代码段中的服务ID不同。我认为该服务也具有1.5.0捆绑包,但可以很好地实现这一点。
答案 1 :(得分:2)
Apache NiFi致力于向后兼容。这意味着在一个版本中设计的流程应在下一个次要版本上无缝运行。有upgrade instructions available here和另外的Migration Guidance。
问题是您现有的flow.xml.gz
文件引用了StandardSSLContextService
控制器服务的1.5.0版本。如果您在1.8.0(默认)实例上进行部署,则该控制器服务实现不存在(1.8.0版本)。您可以通过以下几种方法对此进行补救:
flow.xml.gz
文件以引用1.8.0版本的控制器服务(和其他组件)。请注意,某些组件可能在版本之间添加/更改了属性lib/
。 NiFi可以运行同一组件的多个版本,以实现零星迁移。 Bryan Bende has written more对此进行了说明。在两个版本都可用的情况下,应该正确部署现有流程,并且可以通过UI在画布上更改组件的版本