NIFI 集群状态管理State Management

来源:互联网 发布:武汉理工网络教学平台 编辑:程序博客网 时间:2024/06/05 19:00

状态管理

NiFi为Processors, Reporting Tasks, Controller Services以及框架本身提供了一种持久化状态的机制。 这允许一个处理器,例如,在NiFi重新启动之后,从它离开的地方恢复。 此外,它允许处理器存储一些信息,以便处理器可以从集群中的所有不同节点访问该信息。 这允许一个节点获取另一个节点离开的位置,或者在集群中的所有节点之间进行协调。

Configuring State Providers

当组件决定存储或恢复状态时,它通过提供一个“Scope”来实现-本地节点(Node-local)或集群范围( Cluster-wide)。 然后根据此Scope以及配置的State Providers来确定用于存储和检索此状态的机制。 nifi.properties文件包含三个与这些State Providers相关的属性配置。

属性 描述 nifi.state.management.configuration.file 指定用于配置local 或Cluster-wide的State Providers的外部XML文件。 这个XML文件可能包含多个提供者的配置 nifi.state.management.provider.local 指定在xml文件中配置的local State Provider 的名称 nifi.state.management.provider.cluster 指定在xml文件中配置的cluster-wide State Provider 的名称

该XML文件由一个顶级的stateManagement元素组成,该元素具有一个或多个local-provider以及零个或多个cluster-provider元素。 每一个这些元素中的都包含一个id元素,用于指定nifi.properties文件中可以引用的标识符,以及一个class元素,该元素指定用于实例化State Provider的完全限定类名。 最后,这些元素中的每一个都可以有零个或多个property元素。 每个property元素都有一个属性,名称是State Provider支持的属性的名称。property元素的文本内容是属性的值。

一旦在state-management.xml文件(或nifi.state.management.configuration.file配置了的任何文件)中配置了这些State Provider,这些State Provider可能会被其id引用。

默认情况下,本地状态提供程序配置为WriteAheadLocalStateProvider,将数据保存到$ NIFI_HOME/state/local目录。 默认的集群状态提供程序被配置为ZooKeeperStateProvider。 默认的基于ZooKeeper的提供者在使用之前必须配置它的nifi.zookeeper.connect.string属性。

向ZooKeeper添加数据时,有两个访问控制选项:Open和CreatorOnly。 如果“Access Control”属性设置为“Open”,则允许任何人登录到ZooKeeper,并具有查看,更改,删除或管理数据的完全权限。 如果指定了CreatorOnly,则仅允许创建数据的用户读取,更改,删除或管理数据。 为了使用CreatorOnly选项,NiFi必须提供某种形式的认证。 有关如何配置身份验证的更多信息,请参见下面的ZooKeeper访问控制部分。

如果将NiFi配置为以独立模式运行,则不需要在state-management.xml文件中配置集群提供程序元素,实际上即使配置了也会被忽略。 但是,本地提供者元素必须始终存在。 此外,如果NiFi在集群中运行,则每个节点还必须具有集群提供程序元素并进行正确配置。 否则,NiFi将无法启动。

尽管这些提供程序需要配置的属性并不多,但是它们被外化为一个单独的state-management.xml文件,而不是通过nifi.properties文件进行配置,因为不同的实现可能需要不同的属性, 更容易维护和理解基于XML的文件中的配置,而不是将提供者的属性和所有其他NiFi框架特定的属性混合在一起。

应该注意的是,如果处理器和其他组件使用 Cluster-wide保存状态,如果实例是独立实例(不在集群中)或与集群断开连接,将使用本地状态提供程序。 这也意味着,如果将独立实例迁移到群集,则该状态将不再可用,因为组件将开始使用群集状态提供程序而不是本地状态提供程序。

其他配置

属性 描述 nifi.state.management.embedded.zookeeper.start 指定NiFi的这个实例是否应该启动嵌入式ZooKeeper服务器。 这与ZooKeeperStateProvider结合使用。 nifi.state.management.embedded.zookeeper.properties 指定一个属性文件,其中包含启动的嵌入式ZooKeeper服务器的配置(如果nifi.state.management.embedded.zookeeper.start属性设置为true)