【问题标题】:Can I use another build system to build custom processors with NiFi?我可以使用另一个构建系统来构建带有 NiFi 的自定义处理器吗?
【发布时间】:2022-01-19 20:44:46
【问题描述】:

我的公司使用 SBT/Scala,所以我的目标是使用这些而不是 Maven/Java 开发我们的定制 NiFi 处理器。我遇到的问题是我不知道如何使用 SBT 生成 NAR 文件。 NiFi 有一个 nifi-nar-maven-plugin 包插件,用于将所有处理器依赖项打包到一个 jar (nar) 中。有没有使用 SBT 构建 NAR?

我考虑过的选项:

  • 构建一个胖罐(例如:https://github.com/sbt/sbt-assembly)。我在 NAR 中看到了 pom 文件,但这些文件实际上用于任何用途还是只是元数据?我看到了像 NarUnpacker、NarClassLoader 这样的类,所以我想知道 Nar 格式中是否有特定的东西会阻止 Fat jars 工作。
  • 对插件进行逆向工程并创建一个 SBT 插件。可能需要做一些工作,然后我们就有可能与原始插件的更改不同步。
  • 围绕 SBT 的 maven 插件构建一个包装器。不过,我认为这不会起作用,因为该插件是基于 Maven 库构建的。
  • 只保留 NiFi 子项目作为 maven 构建并通过 SBT 父项目运行它。 (例如http://www.scala-sbt.org/0.13/docs/Process.html
  • 放弃并说服管理层使用 maven。

【问题讨论】:

    标签: maven-plugin apache-nifi


    【解决方案1】:

    NAR 用于在 NiFi 中提供类加载器隔离。每个 NAR 都是一个包含它需要的所有 JAR 的工件,并且它们仅对该 NAR 可见。这可以防止不同 NAR 使用的库发生冲突,因此如果一个 NAR 使用 Guava 16 而另一个 NAR 使用 Guava 18,则不会导致问题。

    NAR 被解压到 nifi_home/work/nar。例如,查看 nifi-0.7.0/work/nar/extensions/nifi-ambari-nar-0.7.0.nar-unpacked/META-INF/bundled-dependencies/ 它将显示包含在ambari NAR。

    每个 NAR 都可以依赖于另一个 NAR,这就是处理器如何依赖于控制器服务的 NAR。在这些情况下,NAR Maven 插件会在 NAR 中创建一个特殊的 MANIFEST 文件,该文件指定父 NAR 的 id,NiFi 使用该 id 来执行适当的类加载。

    开发者指南涵盖了其中的一些内容: https://nifi.apache.org/docs/nifi-docs/html/developer-guide.html#nars

    我个人建议使用 Maven,因为 NAR 插件是生成 NAR 的标准方式。正如您所指出的,可能可以使用 SBT 创建一个类似的插件,但似乎需要付出很多努力。使用 Maven 并不意味着你不能使用 Scala……这个项目提供了一个在 Scala 中开发处理器的模板,但仍然使用 Maven 作为构建工具:

    https://github.com/jfrazee/nifi-processor-bundle-scala.g8

    【讨论】:

      【解决方案2】:

      我创建了一个SBT plugin,其灵感来自sbt-packnifi-maven

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多