Apache NiFi 核心概念和关键特性
本文来源于官方文档翻译
NiFi 的核心概念
NiFi 最早是美国国家安全局内部使用的工具,用来投递海量的传感器数据.后来由 apache 基金会开源.天生就具备强大的基因.NiFi基本设计理念与 Flow Based Programming 基于流式编程 的主要思想非常类似,核心概念如下:
- FlowFile
FlowFile表示在系统中移动的每个对象,FlowFile由两部分组成:- content 内容 既数据本身
- attributes 属性 每条数据带上的属性信息.以键值对的形式.
- FlowFile Processor
- FlowFile处理器,由它完成对数据的实际处理工作.包括但不限于对数据内容和属性的加载,路由,转换,输出等.
- 处理器最灵活之处在于处理器可以读写FlowFile的属性信息,并且用自带的领域特定语言(DSL)对属性进行编程.
- Connection
- 由Connections把各个处理器链接起来,从而形成数据处理流程的有向无环图(DAG图).也称数据流, NiFi 中的 Flow.
- Connection 同时充当处理器间的队列,并且队列的属性高度可配置.
- 这些队列可以配置优先级,可以在设置阈值,可以实现反压。
- Flow Controller
- 流控制器对用户不可见的.它充当维护处理器如何连接和管理所有处理器所使用的线程及其分配的重要角色。
- Flow Controller充当促进处理器之间FlowFiles交换的代理。
- Process Group
- 为了方便管理,把一组特定的处理器及其连接组成的 Flow 放到一个处理组中去,可以通过输入端口接收数据并通过输出端口发送数据。
- 以这种方式,处理组可以通过组合其他组来创建全新组,形成更加复杂的DAG图( Flow 流)。
NiFi 的 关键特性
- Flow 流高度可管理
- 保证交付
NiFi的一个核心理念是即使在非常高的规模下,保证交付也是必须的。这是通过有效使用专门的持久化的预写日志(WAL)和内容存储库来实现的。它们的设计可以实现非常高的事务处理速率,有效的负载分散,写入时复制以及发挥传统磁盘读/写的优势。 - 背压和数据缓冲机制
NiFi支持缓冲所有队列数据,以及在这些队列达到指定限制时提供背压的能力,或者在数据达到指定时间时使数据过期失效。 - 可配置优先级的队列
NiFi允许设置一个或多个优先级策略,用于如何从队列中检索数据。默认是先进先出,但有时候应该先拉取最新的数据,最大的数据或其他一些自定义方案。 - Flow 流可配置特定的QoS(延迟v吞吐量,容量损失等)
在 Flow 流中有一些点是很关键的,且不能容忍丢失.或者有时候必须在几秒钟内处理和交付它。NiFi 可以对这些问题进行细粒度的特定配置。
- 保证交付
- 易于使用
- 可视化的控制和命令
得益于强大的 web 操作界面.无论多么复杂的数据流都能在 web 界面上直观的呈现.整个数据处理流程,包括设计,控制,反馈和监控都可在web界面完成,一步到位.任何更改都能在界面上立马生效,完全不要部署的过程.对于整个数据流,更可以对中间某个处理器进行单独变更,实时生效. - 数据流模板
对于设计好的数据流处理流,可以保存为模板来进行复用.模板可以导出成xml文件,导入到其他 NiFi 中进行多处使用. - 数据溯源
flowfile 流过Flow 流时,NiFi会自动记录,索引并提供可用的起源数据,包括导入,导出,转换等。这些信息对于故障排除,优化等很有用处. - 对历史数据进行细粒度的恢复
NiFi的内容存储库旨在充当历史记录的滚动缓冲区。数据仅在内容存储库过期时或存储空间不足时才会被删除。这与数据起源能力相结合,提供了非常精细的操作功能.包括对数据历史中的某一个点的点击查看内容,下载内容,处理回放等功能.所有数据都可以回溯到它生命周期中很早的某一点.
- 可视化的控制和命令
- 安全机制
- 系统内部安全
Flow 流中的流动的数据都可以进行加密传输 - 用户使用安全
支持用户认证和不同级别的用户授权(可读,管理数据流,系统管理) - 多租户授权
- 系统内部安全
- 可扩展的架构设计
- 可扩展组件
NiFi 的核心设计就是扩展. 它的 processors, Controller Services, Reporting Tasks, Prioritizers, and Customer User Interfaces 都是 可扩展的. - 隔离的类加载器
自定义的类加载器保证了扩展的组件简单的依赖关系. - 点到点的通信协议
NiFi实例之间的通信协议是NiFi 点到点(S2S)协议。S2S可以轻松,高效,安全地将数据从一个NiFi实例传输到另一个实例。NiFi 客户端 的 库也可以轻松在其他应用程序使用,以通过S2S来与NiFi 实例进行通信。S2S中支持基于套接字的协议和HTTP(S)协议作为底层传输协议,使得可以将代理服务器嵌入到S2S通信中。
- 可扩展组件
- 灵活的扩容模型
- 更多的NiFi 实例
可以搭建 NiFi 集群,也可以不组成集群,多台机器使用 点到点 协议来协作. - 更大的并发数量
直接修改处理器的并发数
- 更多的NiFi 实例