Apache NiFi 的开发生命周期
Development Life Cycle for Apache NiFi
我意识到 NiFi,正如他们的文档所定义的那样,"continuous improvement occurs in production"。所以这不适合用作传统的开发工具。然而,对于我正在从事的项目,我们已经决定使用这个工具,所以我不想争论这个工具的优点,因为我意识到会有一些问题。
例如,如果我将更改推送到现有环境(从暂存到生产)并且目标中有实时编辑,它们将被覆盖。所以我对如何组织开发生命周期有疑问。
- 是否可以合并由多个开发人员并行完成的更改(合并导出的 xml 模板文件)?我猜想合并任何重大更改可能很困难,但还没有尝试过。
- 如何管理版本控制 更改?我假设您可以将整个配置导出为模板并将其检查到版本控制中?
- 如何将流部署到不同的服务器?您可以只部署一个库存 NiFi 部署,然后使用 NiFi REST API 从导出的模板(如上所述)对其进行更新吗?
- 如何管理部署到可能具有不同配置的不同环境?您需要更新模板 XML 文件吗?或者我可以从 Zookeeper 之类的东西动态地拉入它吗?
作为您引用的项目的原作者和 Apache NiFi PMC 的成员,让我首先说您提出了很好的问题,我很欣赏您来自哪里。我们可能应该改进介绍文档以更好地反映您提出的问题。
你说得对,当前的方法是创建流程模板,然后你可以将其提交给版本控制。人们还使用与 NiFi 的 REST API 交互的脚本自动部署这些模板。但我们可以而且应该做的远不止于我们必须做的,让数据流管理工作变得更容易,无论您是一名开发人员,准确编写将要部署的内容,还是您是一名专注于运营的人员,必须自己将这些部分放在一起。
- 流 [1] 的管理和版本控制应该更容易和集中管理,以便在多个集群和环境 [2] 之间共享。
- 我们需要确保特定于环境的值很容易映射到给定的环境中,但模板仍然是可移植的[3]。
- 我们需要让 multi-user/multi-tenant 用户体验更加直观和自然 [4]。
1 和 2 的元素将出现在即将发布的 1.0 版本中,而第 3 项将在即将发布的版本中完全涵盖。同时,对于多开发人员案例,我认为他们将自己的本地实例视为 'unit testing' 他们的流程的地方,然后使用共享的暂存或生产环境是有意义的。要记住的关键是,对于许多流程和 NiFi 的方法,可以让给定流程模板的多个实例执行,每个实例都被提供实时数据。该流的 results/output 可以连接以实际传送到某个地方或简单地接地。通过这种方式,它很像源代码管理中分支的心智模型,例如 Git。如果您愿意,您可以选择您认为 'production' 与图表上的哪个流程只是一个正在进行的功能分支。对于来自更传统方法的人来说,这并不明显,我们需要做更多的工作来描述和证明这一点。但是,我们也应该支持更传统的方法,这就是我链接到的一些功能提案将启用的内容。
[1] https://cwiki.apache.org/confluence/display/NIFI/Configuration+Management+of+Flows
[2] https://cwiki.apache.org/confluence/display/NIFI/Extension+Registry
[3] https://cwiki.apache.org/confluence/display/NIFI/Variable+Registry
[4]https://cwiki.apache.org/confluence/display/NIFI/Multi-Tentant+Dataflow
我意识到 NiFi,正如他们的文档所定义的那样,"continuous improvement occurs in production"。所以这不适合用作传统的开发工具。然而,对于我正在从事的项目,我们已经决定使用这个工具,所以我不想争论这个工具的优点,因为我意识到会有一些问题。
例如,如果我将更改推送到现有环境(从暂存到生产)并且目标中有实时编辑,它们将被覆盖。所以我对如何组织开发生命周期有疑问。
- 是否可以合并由多个开发人员并行完成的更改(合并导出的 xml 模板文件)?我猜想合并任何重大更改可能很困难,但还没有尝试过。
- 如何管理版本控制 更改?我假设您可以将整个配置导出为模板并将其检查到版本控制中?
- 如何将流部署到不同的服务器?您可以只部署一个库存 NiFi 部署,然后使用 NiFi REST API 从导出的模板(如上所述)对其进行更新吗?
- 如何管理部署到可能具有不同配置的不同环境?您需要更新模板 XML 文件吗?或者我可以从 Zookeeper 之类的东西动态地拉入它吗?
作为您引用的项目的原作者和 Apache NiFi PMC 的成员,让我首先说您提出了很好的问题,我很欣赏您来自哪里。我们可能应该改进介绍文档以更好地反映您提出的问题。
你说得对,当前的方法是创建流程模板,然后你可以将其提交给版本控制。人们还使用与 NiFi 的 REST API 交互的脚本自动部署这些模板。但我们可以而且应该做的远不止于我们必须做的,让数据流管理工作变得更容易,无论您是一名开发人员,准确编写将要部署的内容,还是您是一名专注于运营的人员,必须自己将这些部分放在一起。
- 流 [1] 的管理和版本控制应该更容易和集中管理,以便在多个集群和环境 [2] 之间共享。
- 我们需要确保特定于环境的值很容易映射到给定的环境中,但模板仍然是可移植的[3]。
- 我们需要让 multi-user/multi-tenant 用户体验更加直观和自然 [4]。
1 和 2 的元素将出现在即将发布的 1.0 版本中,而第 3 项将在即将发布的版本中完全涵盖。同时,对于多开发人员案例,我认为他们将自己的本地实例视为 'unit testing' 他们的流程的地方,然后使用共享的暂存或生产环境是有意义的。要记住的关键是,对于许多流程和 NiFi 的方法,可以让给定流程模板的多个实例执行,每个实例都被提供实时数据。该流的 results/output 可以连接以实际传送到某个地方或简单地接地。通过这种方式,它很像源代码管理中分支的心智模型,例如 Git。如果您愿意,您可以选择您认为 'production' 与图表上的哪个流程只是一个正在进行的功能分支。对于来自更传统方法的人来说,这并不明显,我们需要做更多的工作来描述和证明这一点。但是,我们也应该支持更传统的方法,这就是我链接到的一些功能提案将启用的内容。
[1] https://cwiki.apache.org/confluence/display/NIFI/Configuration+Management+of+Flows
[2] https://cwiki.apache.org/confluence/display/NIFI/Extension+Registry
[3] https://cwiki.apache.org/confluence/display/NIFI/Variable+Registry
[4]https://cwiki.apache.org/confluence/display/NIFI/Multi-Tentant+Dataflow