Apache NiFi技术问询:如何将每个流文件与模板文件合并打包?
纯Apache NiFi处理器实现方案
核心流程步骤
步骤1:解压初始压缩包
使用UnpackArchive处理器,配置Archive Format为ZIP,将source.zip解压为独立的流文件(file1、file2、file3、fileA)。步骤2:分离目标文件与共享文件
使用RouteOnAttribute处理器,设置两个路由规则:- 路由至
shared_file分支:${filename:equals('fileA')} - 路由至
target_files分支:${filename:matches('file[1-3]')}
- 路由至
步骤3:复制共享文件
将shared_file分支的fileA流文件传入CloneFlowFile处理器,设置Number of Clones为3。NiFi流文件内容采用引用式存储,克隆大文件仅复制属性,不会占用额外内存。步骤4:配对目标文件与共享文件副本
- 用
UpdateAttribute处理器给target_files分支的所有流文件添加属性group.key=pack;给克隆后的fileA副本流文件也添加相同属性group.key=pack。 - 将两个分支的流文件传入
MergeContent处理器,配置:- Merge Strategy:
Bin-Packing Algorithm - Max Bin Entries:
2 - Min Bin Entries:
2 - Correlation Attribute Name:
group.key
确保每个分组严格包含1个目标文件+1个fileA副本。
- Merge Strategy:
- 用
步骤5:打包分组文件为目标压缩包
将MergeContent输出的分组流文件传入PackArchive处理器,配置:- Archive Format:
ZIP - Archive Name:
${filename:get(0):substringBefore('.')}.zip(取分组内第一个目标文件的前缀命名压缩包) - Include Parent Directory:
false(避免生成多余目录结构)
- Archive Format:
关键优势说明
全程基于NiFi原生处理器操作,所有文件内容均存储在NiFi内容仓库(磁盘),处理器仅操作流文件引用,无需将大文件加载至内存,彻底解决原方案的内存溢出问题。
内容的提问来源于stack exchange,提问作者DarrenE
相关产品推荐
相关产品推荐

