NiFi是否有同步机制以便知道什么时候已经完成处理?
我摄取一些数据,进行一些处理,在步骤N-1我想知道所有数据都已处理完毕,以便进入(最后)步骤N.
[GetFile / 1000 000行] ----> [Proc1 /处理步骤0] -----> [Proc2 / process step 1] .... [PutSQL / insert into db] ---> [Proc让我知道我已经在表格中插入了所有数据] ----> [例如,ProcN / Run聚合数据]
答案 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)
我们正在研究这种同步请求的方法-将消息回复给远程方并防止管道中出现太多消息。