Apache nifi Nifi:如何避免复制部分写入的文件

Apache nifi Nifi:如何避免复制部分写入的文件,apache-nifi,Apache Nifi,我正在尝试使用Nifi从SFTP服务器获取文件。文件可能很大,所以我的问题是如何避免在编写文件时获取文件。我计划使用liststp+FetchSFTP,但如果GetSFTP可以避免复制部分写入的文件,那么也可以使用GetSFTP 谢谢如果您可以控制写入文件的过程,那么解决这个问题的一个常见模式是首先使用特定的命名结构写入文件,例如以开头。成功写入操作后,将重命名文件,而不使用,并由处理器拾取该文件。GetSFTP和listsfp都有一个名为Ignore domind Files的处理器属性,默认

我正在尝试使用Nifi从SFTP服务器获取文件。文件可能很大,所以我的问题是如何避免在编写文件时获取文件。我计划使用liststp+FetchSFTP,但如果GetSFTP可以避免复制部分写入的文件,那么也可以使用GetSFTP


谢谢

如果您可以控制写入文件的过程,那么解决这个问题的一个常见模式是首先使用特定的命名结构写入文件,例如以
开头。成功写入操作后,将重命名文件,而不使用
,并由处理器拾取该文件。
GetSFTP
listsfp
都有一个名为Ignore domind Files的处理器属性,默认情况下,该属性设置为
true
,这意味着这些处理器不会操作或返回以点字符开头的文件

除了Andy可靠的答案之外,您还可以通过使用ListSFTP/FetchSFTP处理器对,通过执行一些基于元数据的路由,使其更加灵活

在ListSFTP之后,每个流文件将具有诸如“file.lastModifiedTime”等属性。你可以在这里读到他们


您可以将RouteOnAttribute进程放在List和Fetch之间,以检测至少基于报告的上次修改时间“太新”的对象。您可以将它们路由到一个处理器,这只是一个缓慢的过程,以便有意地等待一点。然后,您可以通过第一个路由器运行这些文件,直到它们“足够大”。现在,这是一个公认的超级用户方法,但它确实给了您很多灵活性和控制。我在这里提到的方法不是傻瓜式的,因为源系统可能无法正确报告上次修改时间,也可能不意味着源文件正在编写中,等等。。但是如果你不能做安迪所说的绝对正确的事情,它会给你额外的选择。

谢谢乔给了你一个惊人的答案。最新链接是