【发布时间】:2021-06-03 10:03:27
【问题描述】:
根据官方Nifi documentation,该状态允许 Nifi 处理器“在 NiFi 重新启动后从中断的地方恢复。此外,它允许处理器 存储一些信息 以便处理器可以从集群中的所有不同节点访问该信息”。
如果我的理解不错的话,当我们配置一个zookeeper Provider的时候,状态不会持久化到本地,而是将数据发送给zookeeper。
我探索了zookeeper znodes,找不到任何与状态相关的数据,我能找到的只有Coordinator和Primary节点的信息。但是,本地状态目录仍然被填满。
配置很简单,我有3个外部ZK节点和3个Nifi实例。
这是 nifi.properties 文件的摘录:
nifi.cluster.is.node=true
nifi.zookeeper.connect.string=zk-node1:2181,zk-node2:2181,zk-node3:2181
nifi.state.management.embedded.zookeeper.start=false
nifi.state.management.provider.cluster=zk-provider
这里是 state-management.xml 文件的摘录:
<cluster-provider>
<id>zk-provider</id>
<class>org.apache.nifi.controller.state.providers.zookeeper.ZooKeeperStateProvider</class>
<property name="Connect String">zk-node1:2181,zk-node2:2181,zk-node3:2181</property>
<property name="Root Node">/nifi</property>
<property name="Session Timeout">10 seconds</property>
<property name="Access Control">Open</property>
</cluster-provider>
当我尝试 ls Zookeeper 时,我只能看到 2 个 znode:“components”,但这个 znode 是空的,并且“leaders”zonde 包含有关 Nifi 协调器和主节点的一些数据。
此外,当我浏览事务日志时,即使使用了一些负载平衡连接,我也找不到与 Nifi 状态相关的任何内容。
有人能解释一下 Zookeeper 的数据是什么,为什么即使我们配置了 zk 提供程序,本地状态目录仍然被填满?
谢谢。
【问题讨论】:
-
Zk 状态不是通用的,每个处理器或服务都必须使用 zk 来实现有状态操作。此外,NiFi 使用本地 h2 数据库进行数据处理状态管理。
标签: state apache-nifi apache-zookeeper