HDP-2.5.3.0,NiFi 1.1.1
我正在用NiFi编写自定义处理器。我需要存储多个字符串和时间戳字段,以便在所有/任何节点上都可以使用这些字段。
@Tags({ "example" })
@CapabilityDescription("Provide a description")
@SeeAlso({})
@ReadsAttributes({ @ReadsAttribute(attribute = "", description = "") })
@WritesAttributes({ @WritesAttribute(attribute = "", description = "") })
public class MyProcessor extends AbstractProcessor {
.
.
.
private List<PropertyDescriptor> descriptors;
private Set<Relationship> relationships;
/* Persist these, probably, in ZK */
private Timestamp lastRunAt;
private String startPoint;
.
.
.
@Override
public void onTrigger(final ProcessContext context,final ProcessSession session) throws ProcessException {FlowFile flowFile = session.get();
/*Retrieve lastRunAt & startPoint and use*/
lastRunAt ;
startPoint ;
.
.
.
}
}
请注意,HDFS不是一个选项,因为NiFi可以在没有任何Hadoop安装的情况下运行。
有什么选择可以做到这一点 - 我想知道Zookeeper是否可以用来存储这些数据,因为它的尺寸很小而且NiFi是由ZK支持的。我试图找到使用Zookeeper API来保存这些字段的方法,徒劳无功。
答案 0 :(得分:4)
NiFi揭示了一个名为&#34;州经理的概念&#34;处理器存储这样的信息。运行独立的NiFi时,有一个本地状态管理器,当运行集群时,有一个ZooKeeper状态管理器。
在这里查看开发人员指南:
https://nifi.apache.org/docs/nifi-docs/html/developer-guide.html#state_manager
此外,NiFi中的许多源处理器都使用了这一点,因此您可以在代码中查找示例:
配置州提供商的管理员指南:
https://nifi.apache.org/docs/nifi-docs/html/administration-guide.html#state_management