如何使用流创建正在运行的Nifi Docker映像

问题描述

我启动了一个apache / nifi容器,构建并配置了一个流程。

我想以某种方式将流保存到某个地方,以便可以将其加载到运行Nifi的新docker映像中。

这样,“用户”只需要执行“ docker run ....”,便会启动nifi实例,加载并启动流程。

我不清楚要使用户要运行的图像需要使用哪些文件(nar,xml等)。

解决方法

如果没有自定义内容,则可以从flow.xml.gz目录中保存/conf以保存流。

如果您还想保存内容流文件或当前流文件,则还应该保存flowfile repositorycontent repository

如果您有海关处理程序,则应将nar保存在lib目录中。

一切应在nifi目录中存在,然后再启动。

,

您可以使用 nifi-toolkit 将流和进程组部署到您的 Apache NiFi 实例,而无需依赖 GUI。

https://nifi.apache.org/docs/nifi-docs/html/toolkit-guide.html

此设置要求您具备:

  • Apache NiFi
  • Apache NiFi 注册表

这是一个基于空的 Apache NiFi 实例和 Nifi-Registry 的工作示例(前提是您的 Apache NiFi-Registry 容器的主机名是 nifi-registry 并且其端口是默认的 18080)。在 Apache NiFi 1.12.1 上测试。

首先,您需要为通过 Apache Registry 的流程生成一个 JSON 文件。

  1. 向您的 Apache NiFi 添加注册表:

/opt/nifi/nifi-toolkit-current/bin/cli.sh nifi create-reg-client -rcn registry -rcu http://nifi-registry:18080

创建一个包含您的流程的流程组。右键单击它,然后单击“版本”和“启动版本控制”。这将保存您在 NiFi 注册表中的流程。通过 GUI 处理您的流程,当您准备好时,右键单击您的流程组并提交您的最后更改。现在,您需要从注册表中导出流的 JSON。

/opt/nifi/nifi-toolkit-current/bin/cli.sh registry export-flow-version -u http://nifi-registry:18080 -f <flowid> -fv <flowversion> > <json_file>

现在您的 JSON 流已准备就绪,您可以将其部署到全新环境中。

  1. 在注册表中创建一个存储桶。这将返回新生成的存储桶 ID。

/opt/nifi/nifi-toolkit-current/bin/cli.sh registry create-bucket -u http://nifi-registry:18080 -bn <bucketname>

  1. 使用之前生成的存储桶 ID 创建流。这将返回新生成的流 ID:

/opt/nifi/nifi-toolkit-current/bin/cli.sh registry create-flow -u http://nifi-registry:18080 -b <bucketid> -fn <flowname>

  1. 导入您的流程(它必须之前已从 GUI 导出 -> 右键单击​​下载流程,并且在 Apache NiFi 文件系统中可用):

/opt/nifi/nifi-toolkit-current/bin/cli.sh registry import-flow-version -u http://nifi-registry:18080 -f <flowid> -i <json_file>

  1. 将流程部署为流程组。这将返回新生成的进程组 ID。

/opt/nifi/nifi-toolkit-current/bin/cli.sh nifi pg-import -b <bucketid> -f <flowid> -fv <flowversion>

  1. 启动进程组服务(如果有)

/opt/nifi/nifi-toolkit-current/bin/cli.sh nifi pg-enable-services -pgid <processgroupid>

  1. 启动进程组的处理器(如果有):

/opt/nifi/nifi-toolkit-current/bin/cli.sh nifi pg-start -pgid <processgroupid>

请记住,在执行这些命令之前,Apache NiFi 应该已启动并正在运行。如果您打算将这些指令嵌入到 Dockerfile 中,则应该实现一些等待服务启动的逻辑。

您还可以查看 NiFi 工具包的这个 Python 包装器:

https://github.com/Chaffelson/nipyapi

最后,Apache NiFi 还提供了一些可能对您有所帮助的 REST API:

https://nifi.apache.org/docs/nifi-docs/rest-api/index.html