首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Apache NiFi用户指南-数据流版本控制

管理本地更改

当对版本化的流程组进行更改时,组件的状态更新为“局部修改”()。DFM可以显示、恢复或提交本地更改。当右键单击流程组时,可以在右键菜单中选择这些选项:

或者在流程组内的画布上右键单击:

以下行为不属于局部变更:

禁用/启用处理器和控制器服务

停止/启动处理器

修改敏感的属性值

修改远程进程组url

更新正在引用不存在的控制器服务的处理器,以引用外部可用的控制器服务

分配、创建、修改或删除参数环境

创建、修改或删除变量

分配或创建参数环境不会触发局部更改,因为单独分配或创建参数环境并没有改变流处理的任何内容。必须创建或修改在参数环境中使用参数的组件,这将触发本地更改。修改参数环境不会触发局部更改,因为参数在每个环境中都是不同的。当导入版本化的流时,假定需要一次性操作来设置特定于给定环境的那些参数。删除参数环境不会触发局部更改,因为在该参数环境中引用参数的任何组件都需要修改,这将触发局部更改。

创建变量不会触发局部更改,因为单独创建变量并没有改变流处理的内容。必须创建或修改使用新变量的组件,这将触发本地更改。修改变量不会触发局部更改,因为变量的值在每个环境中都是不同的。当导入版本化的流时,假定需要一次性操作来设置特定于给定环境的那些变量。删除变量不会触发局部更改,因为引用该变量的组件需要修改,这将触发局部更改。

变量不支持敏感值,在对流程组进行版本控制时将包括这些变量。出于兼容性的目的,变量仍然受到支持,但其功能不如参数,比如对敏感属性的支持以及对谁可以创建、修改或使用它们的更细粒度控制。变量将在未来的版本中删除。因此,强烈建议切换到参数。

显示本地更改

通过从右键菜单中选择“版本显示本地更改”,可以在“显示本地更改”对话框中查看对版本化流程组所做的本地更改。

您可以通过在其行中选择“Go to”图标()来导航到组件。

如管理本地更改部分所述,对于哪些操作是可查看的本地更改,存在一些例外。此外,对同一属性的多个更改将仅作为列表中的一个更改出现,因为更改是通过扩散进程组的当前状态和在Show Local changes对话框中记录的保存的进程组版本来确定的。

恢复本地更改

通过从右键菜单中选择“VersionRevert local changes”,将本地更改恢复到版本化的进程组。“恢复本地更改”对话框显示本地更改的列表,以便DFM在启动恢复之前进行检查和考虑。选择“恢复”以删除所有更改。

您可以通过在其行中选择“Go to”图标()来导航到组件。

正如“管理本地更改”一节中所述,对于哪些操作是可逆的本地更改,存在一些例外。此外,对同一属性的多个更改将仅作为列表中的一个更改出现,因为这些更改是通过更改进程组的当前状态和还原本地更改对话框中记录的保存的进程组版本来确定的。

提交本地更改

要提交和保存流版本,请从右键菜单中选择“版本提交本地更改”。在保存流版本对话框中,如果需要,可以添加注释并选择“保存”。

如果已修改的版本不是最新版本,则无法提交本地更改。在这个场景中,版本状态是“本地修改和过期”()。

改变版本

要更改流的版本,右键单击版本化的流程组并选择“版本更改版本”。

在“更改版本”对话框中,选择所需的版本并选择“更改”:

流的版本改变了:

在显示的示例中,版本控制的流从旧版本升级到最新版本。但是,版本控制的流也可以回退到旧版本。

要使“更改版本”成为可用的选择,需要恢复对流程组的本地更改。

停止版本控制

要停止流上的版本控制,右键单击版本控制的进程组,并选择“版本停止版本控制”:

在“停止版本控制”对话框中,选择“断开连接”。

确认将流程组从版本控制中删除。

嵌套的版本化流程

版本控制的流程组可以包含其他版本控制的流程组。但是,如果父进程组包含具有本地更改的子进程组,则无法还原或保存对该父进程组的本地更改。必须首先恢复子进程组,或者提交子进程组的更改,以便在父进程组上执行这些操作。

版本化流程中的参数

在将版本控制的流导出到流注册中心时,将为存储的每个流程组发送参数环境的名称。参数(名称、描述、值、是否敏感)也存储在流中。但是,不存储敏感的参数值。

当导入版本化的流时,将为NiFi实例中不存在的每个流创建一个参数环境。当从流注册中心导入一个版本化的流时,如果NiFi有一个同名的参数环境,那么这些值将被合并,如下面的示例所述:

流的参数环境“PC1”包含以下参数:

版本化的流被导入到NiFi实例中。参数环境“PC1”现在有以下参数:

“Letters”参数在NiFi实例中不存在,被添加了。“Numbers”参数同时存在于版本化的流和NiFi实例中,并且具有相同的值,因此没有进行任何更改。“Password”是一个在NiFi实例中丢失的敏感参数,所以它被添加了,但是没有值。“Port”存在于NiFi实例中,其值与版本化的流不同,因此其值保持不变。

当流版本更改时,参数环境的处理方式类似。考虑以下两个例子:

如果前面引用的版本流被更改为另一个版本(版本2),并且版本2的参数环境“PC1”有一个“Colors”参数,那么“Colors”将被添加到NiFi实例中的“PC1”中。

流的版本1没有与之关联的参数环境。一个新版本(版本2)可以。当流程从版本1更改为版本2时,会发生以下情况之一:

如果不存在新的参数环境,则创建它

将现有的参数环境(通过名称)分配给流程组,并合并参数环境的值

版本化流程中的变量

当流程组置于版本控制之下时,将包含变量。如果导入了引用版本化流程组中未定义的变量的版本化流程,则如果该变量存在,则维护该引用。如果引用的变量不存在,将在进程组中定义该变量的副本。为了说明这一点,假设变量“RPG_Var”是在根进程组中定义的:

创建进程组PG1:

PG1中的GetFile处理器引用变量“RPG_Var”:

PG1保存为版本化流:

如果将PG1版本控制的流导入到相同的NiFi实例中:

添加的GetFile处理器还将引用根进程组中存在的“RPG_Var”变量:

如果将PG1版本控制的流导入到另一个不存在“RPG_Var”的NiFi实例中:

在PG1进程组中创建一个“RPG_Var”变量:

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20200106A0J8XV00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券