2017-02-17 48 views
1

HDP-2.5.3.0,NiFi 1.1.1自定義NiFi處理器所需的存儲數據

我在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來保留這些字段,這是徒勞的。

回答

3

NiFi公開了一種稱爲「狀態管理器」的概念,用於處理器存儲這樣的信息。當運行獨立的NiFi時,有一個本地狀態管理器,當運行羣集時有一個ZooKeeper狀態管理器。

看看開發者指南這裏:

https://nifi.apache.org/docs/nifi-docs/html/developer-guide.html#state_manager

而且,很多在NiFi源處理器的使用這個,所以你可以看看在代碼示例:

https://github.com/apache/nifi/blob/master/nifi-nar-bundles/nifi-hadoop-bundle/nifi-hdfs-processors/src/main/java/org/apache/nifi/processors/hadoop/ListHDFS.java#L249

管理指南爲國家提供的配置:

https://nifi.apache.org/docs/nifi-docs/html/administration-guide.html#state_management

相關問題