NiFi流程中如何排除InvokeHTTP获取的原始完整JSON文件?
解决NiFi生成多余原始全量文件的问题
核心原因
你用的拆分处理器(比如SplitRecord)默认会把原始全量FlowFile发送到original关系,拆分后的单记录FlowFile则发到split关系。问题出在你没处理original关系的FlowFile,导致它跟着拆分后的文件一起走到了写磁盘环节,所以多了一个全量文件。
具体解决办法
方法1:直接丢弃原始文件
- 找到你的拆分处理器(比如
SplitRecord),把它的original关系直接连到**TerminateFlowFile**处理器,让原始文件直接终止,不进入后续写磁盘流程。这是最直接的办法,适合不需要保留原始文件的场景。
方法2:修正RouteAttribute的使用
之前用RouteAttribute没成功,大概率是路由规则没配对:
- 拆分后的单记录FlowFile会自带拆分相关属性,比如
fragment.index(从0或1开始的序号)、record.count(值为1)。 - 配置
RouteAttribute:- 添加规则:匹配属性
fragment.index存在(或者record.count等于1),把这类FlowFile路由到matched关系,指向写磁盘处理器。 - 把
unmatched关系(也就是没有这些属性的原始全量FlowFile)连到TerminateFlowFile。
- 添加规则:匹配属性
方法3:关闭拆分处理器的原始文件输出(按需使用)
部分拆分处理器(比如SplitRecord)有**Keep Original**配置项,把它设为false,处理器就不会输出original关系的FlowFile,只生成拆分后的单记录文件。但如果后续需要原始文件的元数据,就别用这个方法。
验证调整
调整完处理器连接或配置后,重启流程,检查本地目录,应该就只有100个单记录文件了。
内容的提问来源于stack exchange,提问作者Nolann Salaun
相关产品推荐
相关产品推荐

