首页 文章

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

提问于
浏览
1

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

谢谢

2 回答

  • 2

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

    在ListSFTP之后,每个流文件都将具有'file.lastModifiedTime'等属性 . 你可以在这里阅读它们https://nifi.apache.org/docs/nifi-docs/components/org.apache.nifi/nifi-standard-nar/1.3.0/org.apache.nifi.processors.standard.ListSFTP/index.html

    您可以在List和Fetch之间放置RouteOnAttribute进程,以检测至少基于报告的上次修改时间为“太新”的对象 . 你可以将它们路由到一个只是慢速通过的处理器,故意稍等一下 . 然后,您可以通过第一个路由器运行它们,直到它们“足够老” . 现在,这无疑是一种高级用户方法,但它确实为您提供了很多灵活性和控制力 . 我在这里提到的方法不是万无一失的,因为源系统可能无法正确报告上一个mod时间,这可能并不意味着源文件正在写入等等 . 但是如果你不能这样做,它会给你额外的选择绝对正确的事情,安迪谈到的 .

  • 2

    如果您可以控制将文件写入的进程,则解决此问题的常见模式是首先使用特定的命名结构编写文件,例如以 . 开头 . 成功写入操作后,文件将重命名,而不会使用 . ,并由处理器拾取 . GetSFTPListSFTP 都有一个名为Ignore Dotted Files的处理器属性,默认设置为 true ,表示这些处理器不会操作或返回以点字符开头的文件 .

相关问题