Apache Nifi - 使用相对路径使流程定义可移植

Apache Nifi - Make Flow Definitions Portable by using relative paths

我想通过将以下项目中的绝对文件路径替换为相对路径来使流定义可移植

  1. Script Path 属性 所有 ExecuteScript 个处理器
  2. Database Driver Location(s) 属性 的 DBCPConnectionPool 控制器服务
  3. Keystore Filename & Truststore Filename StandardRestrictedSSLContextService 控制器服务的属性

问题:

  1. 是否可以在上述项目中使用相对路径?
  2. 相对路径的root指向-nifi安装目录在哪里?
  3. 在流定义中管理路径的最佳做法是什么?
  4. 使流定义可移植的任何其他最佳实践

编辑: 我们在 Flow Definitions 中使用参数来简化每个环境的配置。目前我们有一个参数来指示 Nifi 根路径。这个问题背后的动机是检查这个参数是否可以通过使用相对路径完全消除。

如果 属性 支持表达式语言,您可以使用相对路径。在您的案例脚本路径中,数据库驱动程序位置支持;但是,密钥库和信任库路径不会。

例如,我在 macos 上使用 ExecuteScript 到 运行 它们的相对脚本路径,windows 以及具有相同路径的 linux

假设您的 Nifi 根目录是 opt/nifi/nifi-current,您在根目录中有 groovy 文件夹和一个 FlowHandler.groovy。所以你的脚本路径如下所示

${user.dir}${file.separator}groovy${file.separator}FlowHandler.groovy

除此之外,我强烈建议您准备自己的 docker 镜像(来自 base Nifi),并将所有常驻人员放入其中进行分发,这样您就可以在所有平台上保持文件路径基本稳定

从Apache NiFi 1.10.0开始,有一个叫做参数的特性,所有组件的所有属性都支持参数。参数使用不同的语法来表示与EL的区别,所以一个参数是#{my.param}。您应该对所有进程组进行参数化,以便保存到 NiFi Registry 或通过右键单击 PG 下载的任何流在导入到另一个环境时都可以赋予新参数。