Nifi 数据流整合工具
NIFI支持强大的可扩展的数据路由,转换和系统中介逻辑的有向图。是一个易于使用,功能强大,可靠的数据处理和分发系统。
以下是NIFI的一些高级功能和目标:
- 基于Web的用户界面
- 设计,控制,反馈以及监控之间无缝衔接
- 高度可配置
- 容错和保证交付
- 低延迟以及高吞吐
- 支持动态分区
- 数据流可以在运行时修改
- 背压设计
- 数据源
- 跟踪数据从头到尾
- 为扩展而设计
- 构建自己的处理器
- 能够快速开发和有效测试
- 安全
- SSL,SSH,HTTPS,内容加密等
- 多租户授权和内部授权/策略管理
什么是NIFI?
简单的说,NIFI就是为了自动化系统之间的数据流而建立的。虽然数据流这个词出现在很多的上下文中,在这里数据流特指系统之间自动的和被管理的信息流。因为企业往往有多个系统,其中有一些系统在生产数据,有一些系统在消费数据。这期间出现的问题和解决方案被广泛讨论。
数据流面临的重大挑战是什么呢?
- 系统故障
- 网络故障
- 磁盘故障
- 软件故障
- 以及人为的失误等
- 数据获取超过数据消费能力
- 当数据处理模块有某一瓶颈时,往往不能够及时处理到达的数据
- 数据边界条件仅仅是建议
- 总是会得到太大,太小,太快,太慢,损坏,错误或者格式错误的数据。
- 系统之间发展进度不一致
- 系统之间发展进度不一致,从而经常需要在生产系统中进行新数据流的添加以及已有数据流的修改,而且这些改动需要更加迅速的实现。
- 合理性和安全性
- 法律,法规和政策的改变,企业对企业协议的变更,系统与系统之间和系统和用户之间的交互必须是安全,可靠和负责任的。
- 生产环境持续改进和提升
- 由于在开发环境中复制生产环境的模式或者状态是几乎不太可能的,所以很多时候需要在生产环境,系统运行时状态下对系统进行持续的改进和提升。
随着大数据的发展,数据流处理技术比以往显得更加的重要,并对其在应对复制性和适配性方面提出了更高的要求。而NIFI就是为解决以上问题而创建的。
NIFI的核心概念
简单的说,NIFI就是为了自动化系统之间的数据流而建立的。虽然数据流这个词出现在很多的上下文中,在这里数据流特指系统之间自动的和被管理的信息流。因为企业往往有多个系统,其中有一些系统在生产数据,有一些系统在消费数据。这期间出现的问题和解决方案被广泛讨论。
(1) FlowFile (Information Packet)
一个FlowFile代表每个被系统处理的数据对象,一个FlowFile有两部分组成:属性和内容。其中内容是数据本身,属性是和数据相关的key-value的键值对,用来描述数据
(2) FlowFile Processor (Black Box)
Processor是NiFi的组件,可以用来创建,发送,接收,转换,路由,割裂,合并,处理FlowFiles。Processor可以访问一个给定的FlowFile的属性和数据内容。Processor可以基于一个给定工作单元中的0到多个FlowFile对象进行操作,从而进行任务的提交或者回滚。
(3) Connection (Bounded Buffer)
Connection 提供Processor之间的实际连接。通过Queue允许不同的进程以不同的速度进行交互。这些队列可以动态分配优先级,而且可以设置负载上限,从而实现背压。、
(4) Flow Controller (Scheduler)
Scheduler负责维护Processors之间的关联信息,并且管理所有处理器对于线程的使用,分配。Scheduler作为Processor之间的代理来促进FlowFile的交换。
(5) Process Group (subnet)
一个特定集合的Processors和它们之间的连接关系形成一个Processor Group, 其定义了从接受端口接收数据并通过输出端口发送数据,通过这种方式,一个Processor Group可以通过简单的组合其他组件来创建全新的组件。
一个FlowFile代表每个被系统处理的数据对象,一个FlowFile有两部分组成:属性和内容。其中内容是数据本身,属性是和数据相关的key-value的键值对,用来描述数据
(2) FlowFile Processor (Black Box)
Processor是NiFi的组件,可以用来创建,发送,接收,转换,路由,割裂,合并,处理FlowFiles。Processor可以访问一个给定的FlowFile的属性和数据内容。Processor可以基于一个给定工作单元中的0到多个FlowFile对象进行操作,从而进行任务的提交或者回滚。
(3) Connection (Bounded Buffer)
Connection 提供Processor之间的实际连接。通过Queue允许不同的进程以不同的速度进行交互。这些队列可以动态分配优先级,而且可以设置负载上限,从而实现背压。、
(4) Flow Controller (Scheduler)
Scheduler负责维护Processors之间的关联信息,并且管理所有处理器对于线程的使用,分配。Scheduler作为Processor之间的代理来促进FlowFile的交换。
(5) Process Group (subnet)
一个特定集合的Processors和它们之间的连接关系形成一个Processor Group, 其定义了从接受端口接收数据并通过输出端口发送数据,通过这种方式,一个Processor Group可以通过简单的组合其他组件来创建全新的组件。
NIFI的架构图
上图是NiFi的架构图。NiFi在安装有JVM的主机系统中运行。
NiFi在JVM中运行的主要组件有:
(1) WebServer(网络服务器)
主要用于承载NiFi基于HTTP的命令和控制API。
(2) FlowController (流控制器)
它是NiFi执行具体操作的大脑,负责从线程资源池中给Processor分配可执行的线程,以及其他资源调度的工作。
(3) FlowFile Repository (FlowFile 库)
其主要负责保存在目前活动流中FlowFile的活跃状态,其功能实现是可插拔的。默认的方式是通过一个存储在指定磁盘分区的持久预写日志来实现此功能。
(4) Content Repository (内容 库)
负责保存目前活动流中FlowFile的实际字节内容,其功能实现是可插拔的。默认的方式是一种相当简单的机制,即存储内容数据在文件系统中。多个存储路径可以被指定,因此可以将不同的物理路径进行结合,从而避免单个物理分区的存储上限。
(5) Provenance Repository (来源库)
Provenance Repository其负责保存所有起源事件数据,同样此功能也是可插拔的,并且默认可以在一个或者多个物理分区上进行存储,在每个路径下的事件数据都会被索引并且可以被查询。
NiFi在JVM中运行的主要组件有:
(1) WebServer(网络服务器)
主要用于承载NiFi基于HTTP的命令和控制API。
(2) FlowController (流控制器)
它是NiFi执行具体操作的大脑,负责从线程资源池中给Processor分配可执行的线程,以及其他资源调度的工作。
(3) FlowFile Repository (FlowFile 库)
其主要负责保存在目前活动流中FlowFile的活跃状态,其功能实现是可插拔的。默认的方式是通过一个存储在指定磁盘分区的持久预写日志来实现此功能。
(4) Content Repository (内容 库)
负责保存目前活动流中FlowFile的实际字节内容,其功能实现是可插拔的。默认的方式是一种相当简单的机制,即存储内容数据在文件系统中。多个存储路径可以被指定,因此可以将不同的物理路径进行结合,从而避免单个物理分区的存储上限。
(5) Provenance Repository (来源库)
Provenance Repository其负责保存所有起源事件数据,同样此功能也是可插拔的,并且默认可以在一个或者多个物理分区上进行存储,在每个路径下的事件数据都会被索引并且可以被查询。
NiFi同样可以以集群模式运行。
集群模式架构图:
集群模式架构图:
从NiFi1.0开始,采用了Zero-Master集群范式。NiFi集群中的每个节点在数据上执行相同的任务,但是每个节点都在不同的数据集上运行。Apache Zookeeper选择一个节点作为集群协调器,故障转移由Zookeeper自动处理。所有集群节点都会向集群协调器报告心跳和状态信息。集群协调器负责断开和连接节点。另外,每个集群都有一个主节点,也有Zookeeper选出,作为DataFlow管理器,您可以通过任何节点的用户界面与NiFi集群进行交互。您所做的任何更改都会复制到集群中的所有节点,从而允许多个入口点。