如何高效移除仅含{}的空Flowfile?求Jolt Spec等优化方案
高效移除仅含
{}的空FlowFile方案 以下是几种简洁高效的实现方案,可大幅减少处理器数量和处理耗时:
方案1:Jolt转换 + 属性路由(2个原生处理器)
利用NiFi原生的Jolt工具标记空JSON,再通过属性路由过滤:
- 添加
JoltTransformJSON处理器,使用如下Spec:
[ { "operation": "modify-overwrite-beta", "spec": { "isEmptyJson": "=size(@) == 0" } } ]
该Spec会给FlowFile新增isEmptyJson属性,当内容为{}时属性值为true,否则为false。
2. 添加RouteOnAttribute处理器,设置路由规则:
Keep:${isEmptyJson:equals('false')}Drop:${isEmptyJson:equals('true')}
将Drop分支指向Terminate处理器直接丢弃空文件。
方案2:Groovy脚本单处理器搞定
用ExecuteScript处理器执行Groovy脚本,直接判断并处理:
def flowFile = session.get() if (!flowFile) return def content = session.read(flowFile).text.trim() if (content == "{}") { session.remove(flowFile) } else { session.transfer(flowFile, REL_SUCCESS) }
脚本逻辑简单:读取内容并去除首尾空白,判断是否为{},是则移除,否则放行。
方案3:正则路由(单原生处理器,性能最优)
用RouteOnContent处理器直接匹配内容:
- 选择
Content Regex模式,添加路由规则:Drop:^\s*\{\}\s*$(匹配可能含首尾空白的纯{}内容)Keep:.*
- 将
Drop分支的目标设置为Terminate,符合条件的空FlowFile会被直接丢弃。
方案选型建议
- 追求无脚本、最高稳定性:选方案3,纯原生处理器,性能最佳;
- 后续需做JSON转换处理:选方案1,顺便完成空文件标记;
- 快速实现、代码极简:选方案2,单处理器搞定。
内容的提问来源于stack exchange,提问作者samrathal
相关产品推荐
相关产品推荐

