一.简述
Apache NiFi是一个易用、强大、可靠的数据处理与分发系统,Apache NiFi的设计目标是自动化管理系统间的数据流
Apache NiFi是美国国家安全局(NSA)开发和使用了8年的一个可视化、可定制的数据集产品。2014年NSA将其贡献给Apache开源社区,2015年7月成功成为Apache的顶级项目
Apache NiFi是一个基于web-ui用户界面,高度配置的、安全的、基于工作流设计理念、具有很强交互性、易用的、为不同系统间或系统内提供数据流管理与处理的系统
单机模式
集群模式
二.功能
Ⅰ).Processor
处理器接口是Apache NiFi公开对FlowFile属性及内容的访问机制,处理器是构成NiFi数据流的基本构建块;可完成功能如下:
- 创建FlowFiles
- 获取FlowFile内容
- 编辑FlowFile属性
- 更新FlowFile属性
- 摄取数据
- 输出数据
- 路由数据
- 提取数据
- 修改数据
Ⅱ).ReportingTask
Reporting Task接口是NiFi公开的一种机制,允许将指标、监控信息和内部NiFi状态发布到外部端点,例如日志文件、电子邮件和远程Web服务
Ⅲ).ControllerService
ControllerService在单个JVM中跨处理器,其为ControllerService和ReportingTask提供共享状态和功能。通过在ControllerService中执行工作,数据可加载一次,并通过此服务公开给所有处理器,而不用在许多不同的处理器加载数据集
Ⅳ).FlowFilePrioritizer
FlowFilePrioritizer接口提供了一种机制,通过该机制可以对队列中的FlowFile进行优先级排序,以便按照对特定用例最有效的顺序处理FlowFiles
Ⅴ).AuthorityProvider
AuthorityProvider负责确定应授予给定用户的特权和角色
三.特性
Ⅰ).可视化
数据流的处理有时非常复杂,NiFi提供了可视化的数据流开发功能,使用户直观、有效的进行业务开发
Ⅱ).可靠交付
遵循NiFi的核心理念:通过利用定制化的持续预写日志和数据仓库技术实现,即使在高压力、高规模的环境中,保证数据的交付。
Ⅲ).数据回压
NiFi提供所有队列数据的缓存,并在队列到指定限制或超时时,可提供数据回压
Ⅳ).高扩展性
NiFi最初设计为可扩展的数据流处理程序,可预测和可重复模式执行。NiFi通过提供自定义类型装载器模型,确保了每个扩展组件间的约束关系被限制在有限的范围
Ⅴ).优先级队列
NiFi允许设置一个或多个优先级方案,用于对数据如何在队列中被检索。默认:先进先出策略;可设置后进先出、最大先出
Ⅵ).数据跟踪
NiFi自动记录、索引对于数据流的每步个操作日志,并将可用的跟踪数据作为对象在系统中传输;这些信息可用于系统故障诊断、优化等其它场景
Ⅶ).历史数据恢复
NiFi的数据存储库被设计成历史滚动缓冲区的角色,数据仅在超时或空间不足时才数据存储库中删除
Ⅷ).流程模板
对数据流高度面向模式,在多种方式解决同一个问题时,可以创建共享的通用处理模板
Ⅸ).安全性
系统间:NiFi可通过双向SSL进行数据加密,并允许在发送与接收端共享密钥,以及其它机制的数据加密与解密
用户与系统间:NiFi允许双向SSL鉴定,并提供可插入的授权模式,来控制用户的登陆权限
四.案例
Ⅰ).案例一:获取MySQL数据到本地文件
1).配置ExecuteSQLRecord
a).选择ExecuteSQLRecord
在Processor中搜索ExecuteSQLRecord
b).配置ExecuteSQLRecord
1.创建Database Connection Pool
2.创建JsonRecordSetWriter
3.配置SQL select query
select Host,User,authentication_string from mysql.user;
c).创建DBCPConnectionPool
在Database Connection Pool中选择DBCPConnectionPool
d).配置DBCPConnectionPool
1.Database Connection URL: jdbc:mysql://hostname:3306/mysql
2.Database Driver Class Name: com.mysql.jdbc.Driver
3.Database User: username
4.Database Password: password
e).激活服务
f).选择JsonRecordSetWriter
在Processor中搜索JsonRecordSetWriter
g).配置JsonRecordSetWriter
h).选择AvroSchemaRegistry
在Processor中搜索AvroSchemaRegistry
i).配置AvroSchemaRegistry
j).激活JsonRecordSetWriter & AvroSchemaRegistry
2).配置PutFile
a).选择PutFile
在Processor中搜索PutFile
b).配置PutFile
1.配置Directory: 文件保存路径
2.可配置Create Missing Directories: 默认true
3).启动服务
可以点击选择单个Processor启动,也可以在空白处点击流程启动