Apache NiFi 1.7.1中List SFTP Processor定时调度不拾取文件求助
Apache NiFi 1.7.1 List SFTP Processor CRON调度无法列出文件问题排查与修复
问题根源
- CRON调度与状态缓存冲突:NiFi 1.7.1的List SFTP处理器使用CRON调度时,会缓存上次执行后的文件扫描状态(如已标记的已扫描文件、时间戳阈值)。若CRON触发间隔内无新文件生成,处理器可能误判无待扫描文件,即便目标文件已存在。修改调度并重启会重置状态缓存,因此能重新拾取文件。
- 服务器时间不同步:NiFi服务器与SFTP服务器系统时间偏差过大时,处理器基于时间戳的文件过滤逻辑会失效。比如SFTP文件时间戳晚于NiFi服务器当前时间,会被判定为“未来文件”不被列出;时间差过大也可能导致已存在文件被误判为已扫描。
Minimum File Age参数设置不合理:若该参数值过大,目标文件最后修改时间与当前时间的差值小于设定值时,处理器会认为文件未稳定,不予列出。结合CRON缓存机制,可能加重问题表现。- 版本固有BUG:NiFi 1.7.1的List SFTP处理器在CRON调度模式下存在状态管理缺陷,持续运行时状态缓存未正确更新,导致无法识别已存在的文件。
修复方案
- 清除处理器状态缓存:在NiFi UI中选中目标List SFTP处理器,右键选择
Clear State,清除已有的扫描状态。后续CRON调度触发时,处理器会重新全量扫描目标目录的符合条件文件。 - 调整状态管理策略:在处理器配置的
Stateful Management模块,将Stateful设置为false(适用于无需跟踪已扫描文件的场景)。此时处理器每次执行都会扫描所有文件,不再依赖缓存,但需配合下游DetectDuplicate处理器避免重复处理。 - 同步服务器时间:使用NTP服务同步NiFi服务器与SFTP服务器的系统时间,将误差控制在1分钟内,消除时间戳导致的过滤错误。
- 优化
Minimum File Age参数:根据文件生成的实际情况,将该参数调整为合理值(如0或1秒),确保已稳定的文件能被处理器识别。 - 升级NiFi版本:NiFi 1.8.0及后续版本修复了List SFTP处理器在CRON调度下的状态管理问题,升级到较新版本可彻底解决该BUG。
内容的提问来源于stack exchange,提问作者Shruti Srivastava
相关产品推荐
相关产品推荐

