仅在另一个处理器不执行时如何执行处理器?

时间:2019-04-02 16:16:57

标签: apache-nifi

我正在将数据插入/更新到表中。数据库系统不提供“ Upsert”功能。因此,我将临时表用于插入,然后合并到“最终”表中,最后将截断该临时表。

这导致比赛状态。如果在合并+截断之间将新数据插入到临时表中,则该数据将丢失。

我如何确保不会发生这种情况?

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

Nifi Flow

1 个答案:

答案 0 :(得分:1)

我将使用阈值为60或30秒的 MonitorActivity 处理器,并使用将持续发送消息设置为“ false”的非活动输出。

SQL成功插入到您的 MonitorActivity 的临时连接中,这样,如果在最近X秒钟内未看到任何活动,他将触发一个流文件,该文件将启动您的合并过程。

https://codeshare.io/aJNNkn下载模板

enter image description here