Apache NiFi 2.x Processor、Input Port和Output Port 说明

Apache NiFi 2.x Processor、Input Port和Output Port 说明

经验文章nimo972025-03-08 14:00:558A+A-

1. Processor(处理器)

  • 核心作用: 执行数据处理的原子操作,如读取、转换、路由、过滤、写入等。每个处理器通过**关系(Relationships)**定义数据流的去向(例如 success、failure、retry),需在连接时明确指定。支持配置调度策略(如执行频率、并发任务数)和敏感属性(如密码,需通过NiFi的敏感值加密机制保护)。
  • 输入与输出: 通过输入连接接收数据(FlowFile),处理完成后根据关系将数据传递到下游。部分处理器仅有输入(如PutKafka)或输出(如GetFile)。
  • 示例: FetchFile:从远程系统拉取文件。UpdateAttribute:修改FlowFile属性。RouteOnAttribute:根据属性值路由数据。

2. Input Port(输入端口)

  • 核心作用: 作为子流程组或远程流程组的入口,接收来自父流程组或远程NiFi实例的数据。支持模块化设计,隐藏子流程内部逻辑,仅通过端口暴露输入接口。
  • 关键规则: 名称必须在所属流程组内唯一,且需与外部连接的输出端口名称匹配。数据来源可以是: 同一NiFi实例的父流程组。远程NiFi实例的Remote Process Group的输出端口。
  • 使用场景: 将复杂流程拆分为多个子流程组,通过输入端口串联。

3. Output Port(输出端口)

  • 核心作用: 作为子流程组或远程流程组的出口,将数据发送到父流程组或远程NiFi实例。与输入端口配合,实现跨层级或跨实例的数据传递。
  • 关键规则: 名称必须与目标输入端口完全匹配,否则连接无法建立。数据仅能发送到: 父流程组中的下游组件。远程NiFi实例的输入端口(通过Remote Process Group配置)。 不可直接连接同一子流程组内的其他组件。
  • 使用场景: 子流程组处理完成后,通过输出端口将结果返回给父流程组。

三者协作关系

  1. 模块化设计: 通过流程组嵌套,用输入/输出端口定义子流程边界。例如: 父流程组调用子流程组时,数据通过子流程组的输入端口传入,处理后经输出端口返回。
  2. 数据流路径Processor → Output Port:处理器处理完成后,通过关系(如success)将数据路由到输出端口。Input Port → Processor:输入端口接收外部数据后,传递给子流程组内的处理器处理。
  3. 跨实例通信: 使用Remote Process Group配置远程NiFi实例的URL,并通过其输入/输出端口实现跨集群数据传输。本地输出端口 → 远程输入端口(或反之)。

补充说明

  • Remote Process Group(远程流程组): 需指定目标NiFi实例的URL,并选择其输入/输出端口建立连接。支持双向通信(发送数据到远程实例或从远程实例拉取数据)。
  • Funnel(漏斗): 可选组件,用于将多个连接的数据合并到单一连接,简化复杂流程。
  • 端口与背压: 输入/输出端口的连接支持配置背压(Back Pressure),防止数据堆积。

示例修正

假设一个跨实例数据流:

  1. 本地流程组: 使用GenerateFlowFile生成数据,通过Output Port发送到远程流程组。
  2. Remote Process Group: 配置远程NiFi实例的URL,并连接其Input Port
  3. 远程流程组: 通过Input Port接收数据,由PutHDFS处理器写入HDFS。

总结

  • Processor:数据处理的执行单元,依赖关系(Relationships)控制流程。
  • Input/Output Port:模块化流程的核心,通过唯一命名和严格连接规则管理数据边界。
  • 协作逻辑:通过端口连接实现层级化、分布式数据流,支持复杂业务解耦。
点击这里复制本文地址 以上内容由nimo97整理呈现,请务必在转载分享时注明本文地址!如对内容有疑问,请联系我们,谢谢!
qrcode

尼墨宝库 © All Rights Reserved.  蜀ICP备2024111239号-7