##[NiFi]全能数据整合工具——NiFi

大数据平台全能数据整合工具——NiFi http://mp.weixin.qq.com/s?src=3&timestamp=1489856435&ver=1&signature=tGL1W-id5hjNAKK1TIO056qHwawj9-N73ryXPzTR-8yENmd9F8pTc-ucHpvbZa9GGvlMVaWFpzeVsjTYKRYDq5OlXKayGSA7jjU1YfQTxOQxpbruIW5HRdfZMc8ZvnrTTdPE2p6ZGEkBPAT93loFDyGe1UrL4bZIwmtx0=

文章来源:中国联通网研院网优网管部——IT技术研究团队
作者:王振亚


    简介:2006年NiFi由美国国家安全局(NSA)的Joe Witt创建。2015年7月20日,Apache基金会宣布ApacheNiFi顺利孵化成为Apache的顶级项目之一。Apache NiFi的设计目标是自动化管理系统间的数据流,其基于工作流式的设计理念具有很强的交互性,非常强大、易用。本文简要介绍NiFi的相关特性,以及常见的应用场景,为系统间或者系统内的数据流管理提供一个更有力的“队友”。

Apache NiFi是什么?
在Apache NiFi官网上,是这么介绍NiFi的:“一个易用、强大、可靠的数据处理与分发系统”。
简单来说,NiFi用于自动化管理系统之间的数据流。企业中,往往有不止一个系统,其中一些系统产生数据,另外一些负责消费数据,而其中往往还有专门负责存储数据的系统。如下图所示,可以看到一个完整的从数据产生到存储,再到被消费的通用数据流。

传统的数据流解决方案往往会遇到以下的挑战:
系统错误,包括网络错误、硬盘错误、软件崩溃,甚至是人为错误,造成了数据流处理的不稳定性;

数据访问超过处理能力,当数据处理模块有某一瓶颈时,往往不能够及时处理到达的数据;

系统之间的发展进度不一致,从而经常需要在生产系统中进行新数据流的添加与已有数据流的修改,并且这些改动需要更加迅速的实现;

安全性,系统与系统之间,系统与用户之间的交互必须是安全、可信的;

    随着大数据技术的发展,数据流处理技术比以往显得更加重要,并对其在应对复杂性与适配性方面提出了更高的要求。而NiFi就是为解决以上的问题而创建的。

NiFi的特性
** 1. 可视化命令与控制**
数据流的处理有时非常复杂,因此提供一个可视化的数据流展现与编辑功能,使得用户在编辑和处理数据流时更加直观,从而提升使用效率。当用户在数据流上做出修改时,这个更改将立即在实际中产生作用。并且,用户在进行局部修改时,不需要停止整个流处理过程。如下图所示为一个数据流任务,此数据流能够将FTP上特定路径下的文件实时同步到HDFS上,而此功能完全是通过拖拽图标,并通过可视化配置实现的。

** 2. 保证交付**
NiFi的一个核心理念为:即使在非常高的规模与压力环境下,保证数据的交付也是必须的。这是通过有效利用定制化的持续预写日志和内容仓库技术做到的。它们一起被设计,以支持非常高的交换速率,和高效的导入速度,并通过写时拷贝技术而发挥传统硬盘的优势。
** 3. 数据回压**
NiFi提供所有队列数据的缓存,并且在队列达到指定限制或者超时的时候,能够提供数据回压。
** 4. 高扩展性**
NiFi最初就被设计成可扩展的,数据流处理程序能够以可预测和可重复的模式执行。
服务装载模式:Processors、ControllerServices、Reporting Tasks、Prioritizers,以上服务可以单独部署。
对于任何基于组件的系统,随着规模的扩张,组件之间的依赖会越来越错综复杂。为了解决这个问题,NiFi通过提供自定义类装载器模型,来确保每个扩展组件之间的约束关系被限制在非常有限的程度。因此,在创建扩展组件时,就不用再过多关注其是否会与其他组件产生冲突。
** 5. 优先级队列**
NiFi允许设置一个或多个优先级方案,用于数据如何在队列中被检索。默认情况下,是先进先出的处理策略。也可以设置成后进先出、最大先出,或者其他的处理策略。可以为每一个connection配置队列的优先级。
** 6. 流式QoS保障**
经常有一些数据是非常重要的不能够丢失,以及需要进行低延迟处理的。NiFi能够为这些数据流提供QoS保障服务。
** 7. 数据跟踪**
NiFi自动记录、索引对于数据流的每个操作日志,并可以把可用的跟踪数据作为对象在系统中传输。这些信息能够在系统故障诊断、优化等其他场景中发挥重要作用。如下图所示为一个数据流的数据跟踪记录。
** 8. 记录/恢复细粒度的历史数据**
NiFi的内容存储库被设计成历史滚动缓冲区的角色。数据仅仅在超时或者空间不足时被从内容存储库中删除。此项功能与数据跟踪功能一起,可以提供一项非常有用的基础功能,即用户能够对中间过程的内容进行下载和回放。如下图所示,为一个数据跟踪记录中提供的数据下载和预览功能。
** 9. 流程模板**
由于数据流是高度面向模式的,并且在解决一个问题时会有多种不同的方式,能够共享一些好的通用处理模板将对用户会有很大的帮助。模板功能允许用户构建、发布设计模板,并共享给其他人。
** 10. 安全性**
系统间,NiFi可以通过双向SSL进行数据加密。并且可以允许在发送与接收端使用共享秘钥,及其他机制对数据流进行加密与解密。
用户与系统间,NiFi允许双向SSL鉴定,并且提供可插入授权模式,因此可以控制用户的登录权限(例如:只读权限、数据流管理者、系统管理员)。
关键概念
NiFi的设计概念与流式编程模型(FlowBased Programming,FBP)的主要概念相似,以下是两者相似概念的对应关系表与注释。对于理解NiFi的实现机制具有帮助。
NiFi术语

FBP术语

注释

FlowFile

Information Packet

一个FlowFile代表每个被系统处理的数据对象,一个FlowFile由两部分组成:属性和内容。内容是数据本身,属性是与数据相关的key-value的键值对,用于描述数据

FlowFile Processor

Black Box

Processor是NiFi的组件,可以用来创建、发送、接受、转换、路由、割裂、合并、处理FlowFiles。在用户建立数据流时,Processor是最重要的组成部分

Connection

Bounded Buffer

提供Processors之间的连接,用来定义Processors之间的执行关系,并允许不同Processors之间以不同的速度进行交互

Flow Controller

Scheduler

其负责维护Processors之间的关联信息,并且管理所有进程对于线程的使用、分配

Process Group

subnet

一个特定集合的Processors与它们之间的连接关系形成一个Process Group,其定义了从接受端口接受数据到通过发送端口发送数据之间,整个数据流的处理过程。并可以通过简单组合其它的部件来创建新的部件

系统架构-单机

如上图所示,为NiFi架构图。NiFi在安装有JVM的主机系统内运行。NiFi在JVM内运行的主要组件有:
Web Server,其主要目的是承载NiFi基于HTTP的命令和控制API;
Flow Controller,其是NiFi执行具体操作的大脑,负责从线程资源池中给Processor分配可执行的线程,以及其他资源管理调度的工作;
FlowFile Repository,其负责保存在目前活动流中FlowFile的活跃状态,其功能实现是可插拔的。默认的方式是通过一个存储在指定磁盘分区的持久预写日志,来实现此功能。
Content Repository,其负责保存在目前活动流中FlowFile的实际字节内容,其功能实现是可插拔的。默认的方式是一种相当简单的机制,即存储内容数据在文件系统中。多个存储路径可以被指定,因此可以将不同的物理路径进行结合,从而避免达到单个物理分区的存储上限。
Provenance Repository,其负责保存所有跟踪事件数据,同样此功能是可插拔的,并且默认可以在一个或多个物理分区上进行存储,在每个路径下的事件数据都被索引,并且可被查询。
系统架构-集群
一个NiFi集群包括一个NiFi集群管理器(NCM)和由其控制的一个或多个NiFi节点(Node)组成。集群的设计遵从简单的master/slave模型,其中NCM是master节点,Node是slave节点。NCM的作用为监视集群中的Nodes状态,并且发送请求给Nodes以修改或查看集群中的数据流。从根本上,NCM保持了整个集群的一致性。虽然模型是master/slave模型,如果主节点挂掉并且数据流仍然存在时,集群中的Nodes将继续保持运行状态。失去NCM意味着新的节点将无法加入集群中,并且对于集群中数据流的修改将无法兑现,直到NCM恢复正常。
全面的生态系统集成
如上图所示,为NiFi所支持的各类平台系统,及数据接入方式,并能够解析各种各样的数据源,例如JSON、XML等。目前,NiFi已经支持了130多种Processor,具有非常强大的数据流管理与处理功能。由于篇幅所限,这么多类Processor不可能在此一一介绍。请感兴趣的童鞋到Apache NiFi官网进行进一步的了解与学习。
应用实例
以上都是一些原理和概念,现在用NiFi来做一个实际的例子。在一个FTP服务器上,有一个名叫userlist.txt.gz的压缩文件,里面是一个txt文件,文件的内容为:

用NiFi要做的工作是:从FTP上获取此文件,进行解压,将其中的M替换为“男”,F替换为“女”,并将处理后的txt文件put到HDFS的特定路径下。为实现此功能,编辑的NiFi流如下:
由五个Processor实现了整个功能。依次Processor的类型及相应设置如下:
1. GetFTP,负责从FTP的特定路径下获取文件,并创建FlowFile供后续处理,具体配置如下:
其中,File Filter Regex属性可以配置要处理文件名的正则表达式,从而起到筛选文件的作用。
2. CompressContent,负责压缩或解压FlowFile的内容,具体配置如下:
其中,Mode定义实现压缩还是解压,CompressionFormat定义压缩或解压格式。
3. ReplaceText,通过定义正则表达式,可对正则表达式匹配到的内容进行替换,从而起到对FlowFile内容进行修改的作用。此ReplaceText命名为“替换M为男”,即将FlowFile内容中的M替换成文字“男”。具体配置如下:
其中,Search Value为定义的正则表达式,ReplacementValue为替换内容。在此Processor,此为替换M为“男”。
4. ReplaceText,与上一个Processor是同一个类型,在此ReplaceText命名为“替换F为女”,即将FlowFile内容中的F替换成文字“女”。
5. PutHDFS,负责将FlowFile以文件形式存放到HDFS的特性路径下。,具体配置如下:
其中,HadoopConfiguration Resource为目标HDFS的配置文件。Directory为HDFS上存放文件的目录。
在经过了上述5个Processor的数据流处理过程,之前在FTP上的userlist.txt.gz文件已经被解压、字符替换,并Put到HDFS的特定路径下了。经过处理后的文件如下:

NiFi也可以将FlowFile直接输出到数据库中,这样一个简单的ETL工作就完成了。
结束语
本文给大家介绍了一款易用、强大、可靠的数据处理与分发系统——Apache NiFi。目的是为了让被系统间数据流管理任务所困扰的技术人员,有一个更加简单、更加方便的选择。从而有效减少对此项工作所耗费的时间精力,并能够大大提升系统间数据流管理的效率和安全性。有了这个强有力的工具,我们没有理由再去造重复的轮子了。
-END-
声明:
本文为中国联通网研院网优网管部IT技术研究团队独家提供。
如需转载或合作,请联系管理员(zhouyh@dimpt.com

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342

推荐阅读更多精彩内容