问题描述
我启动了一个apache / nifi容器,构建并配置了一个流程。
我想以某种方式将流保存到某个地方,以便可以将其加载到运行Nifi的新docker映像中。
这样,“用户”只需要执行“ docker run ....”,便会启动nifi实例,加载并启动流程。
我不清楚要使用户要运行的图像需要使用哪些文件(nar,xml等)。
解决方法
如果没有自定义内容,则可以从flow.xml.gz
目录中保存/conf
以保存流。
如果您还想保存内容流文件或当前流文件,则还应该保存flowfile repository
和content 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 文件。
- 向您的 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 流已准备就绪,您可以将其部署到全新环境中。
- 在注册表中创建一个存储桶。这将返回新生成的存储桶 ID。
/opt/nifi/nifi-toolkit-current/bin/cli.sh registry create-bucket -u http://nifi-registry:18080 -bn <bucketname>
- 使用之前生成的存储桶 ID 创建流。这将返回新生成的流 ID:
/opt/nifi/nifi-toolkit-current/bin/cli.sh registry create-flow -u http://nifi-registry:18080 -b <bucketid> -fn <flowname>
- 导入您的流程(它必须之前已从 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>
- 将流程部署为流程组。这将返回新生成的进程组 ID。
/opt/nifi/nifi-toolkit-current/bin/cli.sh nifi pg-import -b <bucketid> -f <flowid> -fv <flowversion>
- 启动进程组服务(如果有)
/opt/nifi/nifi-toolkit-current/bin/cli.sh nifi pg-enable-services -pgid <processgroupid>
- 启动进程组的处理器(如果有):
/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: