Nifi-1.0.0 - 同步机制

时间:2016-09-15 13:56:25

标签: java synchronization data-synchronization apache-nifi

NiFi是否有同步机制以便知道什么时候已经完成处理?

我摄取一些数据,进行一些处理,在步骤N-1我想知道所有数据都已处理完毕,以便进入(最后)步骤N.

[GetFile / 1000 000行] ----> [Proc1 /处理步骤0] -----> [Proc2 / process step 1] .... [PutSQL / insert into db] ---> [Proc让我知道我已经在表格中插入了所有数据] ----> [例如,ProcN / Run聚合数据]

2 个答案:

答案 0 :(得分:3)

NiFi实际上没有内置于框架中的显式同步功能,但某些处理器具有帮助同步活动的功能。我可以想出几种可能的方法来使你的流程工作:

  • 计划 - 您可以使用处理器上的CRON计划安排GetFile及更高版本的聚合操作,假设操作的持续时间相对可预测。

  • MonitorActivity - this reasoning处理器可以根据队列中的不活动触发流文件。您可以使用PutSQL的下游,并在插入停止并且聚合应该开始时触发。

  • MergeContent(简单) - MonitorActivity处理器可能会将PutSQL的结果聚合到触发聚合操作的单个消息中。您必须尝试使用​​bin大小和年龄的属性才能使其正常工作。

  • MergeContent(碎片整理) - MergeContent具有碎片整理策略,旨在将较大文件的片段关联在一起。它需要在流文件上设置特定属性,请参阅文档底部的“读取属性”部分。行为似乎接近你想要的,但设置这些片段属性可能很困难。

答案 1 :(得分:0)

我可能会建议您尝试一下。 NiFi有一个不错的API,可让您启动和停止处理器。您可以使用InvokeHTTP处理器在NiFi中调用此API。这样,您就可以启动[ProcN /对数据运行聚合],并在运行后再次关闭。您必须确保该处理器不会连续运行。因此,您的处理器将是:

UIGraphicsBeginImageContextWithOptions(layer.frame.size, false, 0)

我们正在研究这种同步请求的方法-将消息回复给远程方并防止管道中出现太多消息。