一.簡述
Apache NiFi是一個易用、強大、可靠的資料處理與分發系統,Apache NiFi的設計目标是自動化管理系統間的資料流
是美國國家安全局(NSA)開發和使用了8年的一個可視化、可定制的資料集産品。2014年NSA将其貢獻給Apache開源社群,2015年7月成功成為Apache的頂級項目
是一個基于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啟動,也可以在空白處點選流程啟動