1NIFI概览|NIFIOverView
1.1NIFI是什么|Whatis Apache NIFI
NIFI的设计目标,是让各系统之间自动进行数据流交换。企业通常有多个系统,有的系统生产数据,有的系统消费数据。dataflow。
dataflow涉及到的主要问题:
系统失效:网络失效,硬盘失效,软件崩溃,操作人员犯错。
数据过多来不及处理:
数据边界问题:数据太大,太小,太快,太慢,格式错误,诸如此类。
噪声和信号标准不定:昨天的噪声可能在明天就是信号,所以要能快速创建新dataflow以及改变旧dataflow,拥抱变化。
系统间速率不同:各系统的协议和格式可能会改变,或者不兼容,分布式系统通常都是松散关系。
合规与安全:法律,规则,政策等的变动。商业协议变动。系统和系统之间,系统和用户之间,需要考虑安全,可信,可度量。
产品持续改进:
dataflow问题的已有的有效解决方案:soa,the rist of the api(api economy), internet of things, 大数据
1.2NIFI的核心概念|Thecore concepts of NIFI
NIFI的设计理念,非常接近flowbased programming(FBP).
FlowFile:一个FlowFile表示一个对象,这个对象可以在系统之间进行移动,被传递。NIFI保存一个FlowFile的key-value的属性列表和这个FlowFile的字节内容。
FlowFileProcessor:Proccessor对FlowFile进行各种操作,它可以获取FlowFile的属性和内容,同时操作多个FlowFile,可以将操作结果提交给下一个Processor或者回滚。
Connection:它提供Processor之间连接。它的作用就像一个queue,各种processor和它进行交互。
FlowController:控制器,它记录processor之间的连接关系,管理线程,管理processor和线程之间的使用关系。是一个类似broker的角色。
Processgroup:它表示一组processor和它们之间的连接。对于这个group而言,它可以通过input端口和output端口,进行数据的接收和发送。
1.3NIFI 架构|NIFIArchitecture
NIFI在jvm上执行。主要构件如下:
webserver: 主要操作界面和控制api
flowcontroller: 整个流程的大脑,提供线程运行extension,管理各种extension接受数据并执行
extension:NIFI有各种extension,实现不同的功能
flowFilerepository: NIFI跟踪FlowFile的状态和操作
contentrepository: NIFI记录FlowFile的内容,就是记录FlowFile在文件系统上的block
ProvenanceRepository:存储所有的provenance(起源)事件数据,事件可以被索引和搜索。
NIFI可以部署成集群方式运行。
从NIFI1.0开始,实现了0-master集群策略。NIFI集群的每一个节点都能对数据的子集执行相同的操作,然后合并结果。
1.4NIFI的性能和特性|PerformanceExpectations and Characteristics of NIFI
NIFI的性能有host机器的能力决定,主要是cpu和硬盘。
io:常规服务器保守估计50M/s的读写,NIFI可能会达到100M/s或者更高。
cpu:重io的flow,可能会导致数十个线程并发。
内存:NIFI在jvm上,jvm的gc对NIFI影响很大
1.5高阶的NIFI关键特性|HighLevel Overview of Key NIFI Features
本节提供NIFI的2万英尺的鸟瞰图。
1.5.1Flow Managerment
确保数据发送成功:这是必须必须必须达到的。这通过有效使用基于目标的持久化提前写入log和contentrepostory实现的。
数据缓存:NIFI支持缓存queued数据。所以当queue达到上限的时候,或者age达到指定的时间的时候,会进行缓存。
优先队列:可以选择数据分别到达最老得,最新的,最大的,以及其他状况的队列。