You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Apache NiFi流中无需存储文件/数据库 下游处理器如何调用首处理器输入输出

Apache NiFi 跨处理器缓存值实现方案

一、可用原生处理器实现方式

不需要落地存储的情况下,可选择以下两种适配不同场景的方案:

  • UpdateAttribute + FlowFile属性传递(单链路场景首选)
    这是最轻量化的实现方式,直接在processor1中通过UpdateAttribute把产出的a值写入FlowFile的自定义属性(例如命名为cached_a),processor2同理把产出的b值写入自定义属性cached_b。NiFi的同一条链路中,FlowFile的属性会默认向后传递,你在processor4直接通过表达式${cached_a}即可调用processor1的产出值,processor5通过${cached_b}即可调用processor2的产出值,全程数据都存在FlowFile元数据中,不会落地到文件或数据库。

    提示:如果数据流中间有FlowFile拆分、合并操作,需要提前配置属性继承规则,确保拆分/合并后的新FlowFile仍携带上述两个缓存属性。

  • DistributedMapCacheServer + PutDistributedMapCache + FetchDistributedMapCache 组合(全局共享缓存场景)
    如果你需要缓存的值可以跨不同FlowFile、甚至跨不同数据流调用,可使用这套内置缓存组件:
    1. 先启动DistributedMapCacheServer控制器服务,配置缓存大小、过期时间,数据全程存储在内存中不会落地
    2. 在processor1后串联PutDistributedMapCache,把a值写入缓存,自定义全局唯一key例如global_cached_a
    3. 在processor2后串联PutDistributedMapCache,把b值写入缓存,自定义key例如global_cached_b
    4. 在processor4、processor5前分别串联FetchDistributedMapCache,根据对应key把缓存值取出写入FlowFile属性即可调用

二、是否可以通过bash脚本实现

可以实现,但性价比远低于原生处理器方案,非特殊场景不推荐。
实现逻辑:你可以通过ExecuteStreamCommand处理器调用自定义bash脚本,把需要缓存的值写入Linux系统默认的共享内存挂载目录/dev/shm(该目录数据全部存储在内存中,不会落地到磁盘),写入命令可写为echo $a > /dev/shm/cache_a,读取命令可写为a=$(cat /dev/shm/cache_a)。

提示:该方案需要自行处理缓存并发读写冲突、过期清理、集群多节点缓存同步等问题,运维成本较高。

内容的提问来源于stack exchange,提问作者newbie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 13:06:08