Apache nifi 如何仅在另一个处理器未执行时执行处理器?

Apache nifi 如何仅在另一个处理器未执行时执行处理器?,apache-nifi,Apache Nifi,我正在向表中插入/更新数据。数据库系统不提供Upsert功能。因此,我使用一个暂存表进行插入,然后合并到最终表中,最后截断暂存表 这导致了一种竞赛条件。如果在合并+截断之间将新数据插入临时表,则此数据将丢失 我如何确保这不会发生 我尝试通过Wait/Notify对此进行建模,但这也不是一个干净的解决方案。可以填充将数据放入临时表PutDatabaseRecord处理器的队列,并且插入/更新ExecuteSQL的MergeVertica仍然可以执行 我将使用60或30秒阈值的MonitorActi

我正在向表中插入/更新数据。数据库系统不提供Upsert功能。因此,我使用一个暂存表进行插入,然后合并到最终表中,最后截断暂存表

这导致了一种竞赛条件。如果在合并+截断之间将新数据插入临时表,则此数据将丢失

我如何确保这不会发生

我尝试通过Wait/Notify对此进行建模,但这也不是一个干净的解决方案。可以填充将数据放入临时表PutDatabaseRecord处理器的队列,并且插入/更新ExecuteSQL的MergeVertica仍然可以执行

我将使用60或30秒阈值的MonitorActivity处理器,并使用非活动输出,将Continuous Send Messages设置为false

成功地将SQL插入暂存连接到MonitorActivity中,这样,如果在最后X秒内没有看到任何活动,他将触发一个流文件,启动合并过程

从下载模板


只是一个想法:将处理过的列添加到stage表中。使用值0插入。合并使用中:更新已处理的阶段集=1;已处理的合并=1;删除已处理=1的位置;或者你可以添加更多的状态。。。所以:使用数据库的功能来管理数据库中数据的状态。感谢您的回答,我以前从未听说过MonitorActivity。仍然存在这样的情况,流文件被卡在某个上游处理器中,就在我们开始合并时,它被传输到PutDatabaseRecord处理器。如果CPU忙,是否会发生这种情况?