Apache NiFi中能否将GetSFTP作为后续处理器及替代方案
NiFi 实现从指定SFTP文件夹拉取文件的解决方案
关于GetSFTP能否作为后续处理器的问题
不行。GetSFTP属于源类型处理器,它的设计逻辑是主动触发、从SFTP服务器拉取数据,不需要接收上游传来的FlowFile,因此无法作为其他处理器的下游节点。
正确实现思路:用FetchSFTP替代GetSFTP
FetchSFTP是NiFi专门设计用来接收上游FlowFile输入的SFTP拉取处理器,完美适配你的场景,具体步骤如下:
保留现有前置流程:
- 继续用GetFile读取包含文件夹名的文件,通过SplitText或SplitRecord等处理器拆分出单个文件夹名称,给每个生成的FlowFile添加
FolderName属性,值为对应的文件夹名。
- 继续用GetFile读取包含文件夹名的文件,通过SplitText或SplitRecord等处理器拆分出单个文件夹名称,给每个生成的FlowFile添加
配置FetchSFTP处理器:
- 把上游拆分后的成功队列直接连接到FetchSFTP(拖曳连线即可,FetchSFTP支持接收上游输入)。
- 核心属性配置:
- SFTP Client Service:配置好你的SFTP连接池(和原本给GetSFTP配置的连接信息一致即可)。
- Remote Path:填入表达式语言
${FolderName},处理器会自动读取每个FlowFile携带的FolderName属性值,作为要拉取的SFTP远程路径。 - 按需设置其他属性,比如是否递归拉取子文件夹、文件过滤规则等。
后续处理拉取到的文件:
- FetchSFTP拉取到的文件会生成新的FlowFile,你可以直接将这些FlowFile连接到PutFile、ConvertRecord等后续处理器,完成数据落地或转换。
旧版本NiFi的替代方案
如果你的NiFi版本过低没有FetchSFTP组件,可以用ExecuteScript处理器编写Groovy或Python脚本:
- 脚本中获取上游FlowFile的
FolderName属性值。 - 调用SFTP客户端库(比如JSch for Groovy)连接到SFTP服务器,拉取对应路径下的文件。
- 把拉取到的内容写入新的FlowFile输出。
不过优先推荐FetchSFTP,它是官方维护的标准组件,稳定性和可维护性都比自定义脚本强。
内容的提问来源于stack exchange,提问作者just learner
相关产品推荐
相关产品推荐

