Nifi1.11.4简介

NiFi 最初由美国国家安全局(NSA)开发和使用的一个可视化、可定制的数据集成产品。2014 年 NSA 将其贡献给了 Apache 开源社区,2015 年 7 月成为 Apache 顶级项目。

NiFi 特性

nifi zookeeper 集群 nifi集群原理_Web

NiFi 为数据流而设计,它可以用来在不同的数据中心之间搭建数据流通的管道。NiFi 通过拖拽界面、配置参数、简单地连接,即可完成对数据流的托管和系统间的自动化传输,使用者可以可视化整个过程并实时进行更改。它还有很多优秀的特性:

1. Web 界面拖放组件,并支持图形化配置

2. 使用人员无需进行代码开发

3. 支持多种数据源

4. 自动进行负载均衡和反压

5. 方便监控

6. 便于扩展且易恢复

7. 支持模板复用

核心名词解释

nifi zookeeper 集群 nifi集群原理_nifi集群_02

FlowFile 系统处理器之间流通的对象

FlowFile Processor 处理数据的单位,我们二次开发也是开发这个Processor

Connection processor间的连线,本质是一个优先级队列,数据的缓冲背压(back press)和这个模块有关

Flow Controller 控制Process的连接,启动,停止时框架层面的东西

Process Group 处理器的集合

FlowFile 

可以类比http数据包,http用于web和后端系统的数据的数据交互,http数据放body,登录秘钥可以放cookie也可放header;而nifi的FlowFile是系统数据流转的最小数据包,由两个必要组成,内容存储单元和属性单元,存储单元放的是我们希望流转的数据,属性单元是对数据做的元数据描述;

nifi zookeeper 集群 nifi集群原理_nifi集群_03

框架简介

NiFi 是基于 Java 的,通过主机上的 JVM 来进行执行,主要由Web Server、Flow Controller、Repository 这三个核心部件组成

nifi zookeeper 集群 nifi集群原理_Server_04

Web Server:NiFi 提供了基于 HTTP 协议的 Web 页面,我们可以通过 Web 页面来操作自己的 Task。

Flow Controller:NiFi 的核心部分,可以将其理解为文件交流的处理器。Processer 则是实际处理单元。l NiFi 将每一个功能集成到一个 Processor 上,Flow Controller 维持着多个处理器的连接并管理各个Processer。

l NiFi 提供了许多可用的 Processor,如Amazon、Attributes、Hadoop 等,我们在使用时可以直接拖拽 Processor 并更改其配置。

l 当官方的 Processor 不能支持我们的业务需求时,我们还可以利用 Nifi 的可扩展性进行定制开发。Repository:NiFi 提供了三个数据库 FlowFile、Content、Provenance,分别来存储数据流的运行状态、实际数据以及数据源信息。

集群简介

NiFi 也支持集群模式,运行时每个节点执行相同操作、不同数据。集群依赖 ZooKeeper。ZooKeeper 会选出主节点以及集群协调器,负责监督其他节点的心跳。

nifi zookeeper 集群 nifi集群原理_Web_05

强大的功能支持

nifi zookeeper 集群 nifi集群原理_Server_06

这张图比较老,但是它告诉我们nifi主要涉及的技术点繁多,从一方面体现了它的功能强大。

nifi zookeeper 集群 nifi集群原理_nifi集群_07

这张图是1.11.4的最新目前已经开源了287个处理器

关系型数据库 mysql,pgSql,sqlServer2008+,mysql2012+,oracle,oracle12+

非关系型数据库 mongodb

文件服务器:FTP

文件:excel,csv,hdfs,txt,zip(待确认)

消息中间件:Kafka,amqp,rabbit

搜索引擎:Elasticsearch

接口:HTTP

大数据:habse,hive(待确认)

其它(还有很多不常用的)

总结

本文简单介绍了一下nifi基本知识,后续文章会出更多的细节上的知识。

在笔者看来niif是一个强大的流式运行的分布式框架,适用做数据接入,数据分发;系统比较吃内存和cpu和磁盘的性能。

在笔者看来nifi的框架很优秀,尤其是nifi的数据有向图清楚的用户知道程序的运行情况,和传统数据黑盒运行,只能通过日志查看系统流程走向有很大区别,nifi天生的分布式架构,让用户对多线程的高并的程序开发也能做到得心应手;

nifi有很好的的调度策略,配合ExecuteScript 可以做系统调度;

nifi可以做很多事,如简单的ETL,并且现有源码也提供一些好用的处理器,但是笔者并不推荐使用nifi做ETL相关的工作,相比较kettle和datax,用nifi做ETL则不是那么专业;为什么这么说?传统ETL分为抽取,清洗+转换,加载,首先是抽取分为全量抽取和增量抽取,因为nifi是做数据路由的,所以这部分它是满足的;其次是清洗转换,字段的映射,则这部分需要定制开发;加载这部分nifi也是可以支持的;ETL的灵活度很大一部分体现在,抽取的条件和过滤策略以及对于字段的清洗转换策略的配置,这部分kettle支持的比较好,如果用nifi来做可能要自己做很多事情。