Apache nifi 如何在nifi中一次处理单个流文件?

Apache nifi 如何在nifi中一次处理单个流文件?,apache-nifi,Apache Nifi,NiFi版本1.53节点群集 我有nifi flow作为 ListFTP->FetchFTP1->RouteOnAttribute->UpdateAttribute->FetchFTP2->ExecuteGroovyScript->PutFTP 一切正常。当流文件到达FetchFTP2时,我希望以30秒的间隔一次处理单个流文件。不考虑flowfile的3个节点并行处理 我尝试过的事情: 将RunSchedule设置为30秒 问题:它不起作用,因为每个流文件最初都由不同的节点处理。对于FetchF

NiFi版本1.53节点群集

我有nifi flow作为 ListFTP->FetchFTP1->RouteOnAttribute->UpdateAttribute->FetchFTP2->ExecuteGroovyScript->PutFTP

一切正常。当流文件到达FetchFTP2时,我希望以30秒的间隔一次处理单个流文件。不考虑flowfile的3个节点并行处理

我尝试过的事情:

将RunSchedule设置为30秒

问题:它不起作用,因为每个流文件最初都由不同的节点处理。对于FetchFTP,同时处理三个流文件。 还尝试从所有节点执行主模式。这不起作用,因为FetchFTP只处理最初由主节点处理的流文件,其他所有由不同节点处理的流文件都保留在队列中

在FetchFTP处理器之前使用ControlRate。 同时处理三个流文件。 使用等待和通知处理器。 同时处理三个流文件。
是我遗漏的东西或其他更好的方法。

在ListFtp和FetchFtp之间使用一些简单的处理器。例如,下图中的UpdateAttribute Barrier

在Barrier和FetchFtp之间的队列上设置负载平衡,以平衡节点之间的文件

并设置屏障计划=30秒,仅在主节点上运行

或者,您可以利用队列的背压


在ListFtp和FetchFtp之间使用一些简单的处理器。例如,下图中的UpdateAttribute Barrier

在Barrier和FetchFtp之间的队列上设置负载平衡,以平衡节点之间的文件

并设置屏障计划=30秒,仅在主节点上运行

或者,您可以利用队列的背压

我希望以30秒的间隔一次处理单个流文件。 不考虑flowfile的3个节点并行处理

每个处理器的配置面板中都有一个选项,只有在执行集群模式时才在主节点上执行。出于性能原因,我不一定推荐它,但是如果您确信您需要它,它应该能够确保整个集群中只有一个线程、一个进程

我希望以30秒的间隔一次处理单个流文件。 不考虑flowfile的3个节点并行处理


每个处理器的配置面板中都有一个选项,只有在执行集群模式时才在主节点上执行。出于性能原因,我不一定推荐它,但是如果您确信您需要它,那么它应该能够确保在集群中只有一个线程、一个进程。

除了执行所有3个节点外,2个似乎对您有效。只需对所有3个处理器listftp、controlrate、fetchftpi在主节点上应用execute,就可以在ExecuteGroovyScript之前使用第二个FetchFTP来处理单个流文件。当流文件转到FetchFTP时,所有流文件都具有不同的节点地址。另外,我希望所有节点都处理流文件,然后稍后在第二个FetchFTP中处理单个流文件,而不管节点地址如何。似乎2适用于您,但执行的所有3个节点除外。只需对所有3个处理器listftp、controlrate、fetchftpi在主节点上应用execute,就可以在ExecuteGroovyScript之前使用第二个FetchFTP来处理单个流文件。当流文件转到FetchFTP时,所有流文件都具有不同的节点地址。另外,我希望所有节点都处理流文件,然后稍后在第二个FetchFTP中处理单个流文件,而不考虑节点地址。谢谢您的建议。但是我得到了ListFTPprimary->FetchFTPprimary->在这之后,我有大约15个处理器用于操作,它们具有不同的节点地址->最后我使用了FetchFTP,在这里,即使我使用schedule=30秒或backpressure=1,它也不会处理单个流文件,因为它在群集模式下工作。我建议在获取FTP之前使用处理器上的主节点,并将吞吐量限制为每30秒一个文件。因为不同的流文件分配了不同的节点地址。如果我们使用主选项,FetchFTP之前的处理器不会处理其他节点地址。谢谢您的建议。但是我得到了ListFTPprimary->FetchFTPprimary->在这之后,我有大约15个处理器用于操作,它们具有不同的节点地址->最后我使用了FetchFTP,在这里,即使我使用schedule=30秒或backpressure=1,它也不会处理单个流文件,因为它在群集模式下工作。我建议在获取FTP之前使用处理器上的主节点,并将吞吐量限制为每30秒一个文件。因为不同的流文件分配了不同的节点地址。如果我们使用主选项,则FetchFTP之前的处理器不会处理其他节点地址。谢谢。虽然只使用主选项接收原始文件,但之后使用许多其他处理器处理流文件
,因此不同的流文件有不同的节点地址分配给它。最后,当我使用FetchFTP并设置时间表或背压时,它仅在集群模式下工作。谢谢。虽然使用仅主选项接收原始文件,但之后使用许多其他处理器处理流文件,因此不同的流文件分配了不同的节点地址。最后,当我使用带有时间表或背压设置的FetchFTP时,它只在集群模式下工作。