好記憶不如爛筆頭,能記下點東西,就記下點,有時間拿出來看看,也會發覺不一樣的感受.
NiFi 總結
一個易用、強大、可靠的數據處理與分發系統。基於Web圖形界面,通過拖拽、連接、配置完成基於流程的編程,實現數據採集等功能
一、什麼是NiFi?
NiFi是美國國家安全局開發並使用了8年的可視化數據集成產品,2014年NAS將其貢獻給了Apache社區,2015年成爲Apache頂級項目
傳統的數據流解決方案往往會遇到以下挑戰:
- 網絡錯誤
- 硬盤錯誤
- 軟件崩潰
- 人爲錯誤
- 數據生產能力超過消費能力
- 對現有數據流進行增加、修改需要的操作太複雜
二、NiFi的特性
1. 可視化控制
NiFi提供一個可視化的數據流展現與編輯,使得用戶處理數據流更加直觀。在數據流上做出修改時,這個更改將立即在時機生產中產生作用。 用戶進行局部修改時,不需要停止整個流處理過程。
2. 保證交付
3. 數據背壓
NiFi提供隊列緩存,當生產速度大於消費速度時。能提供數據背壓能力
4.高擴展性
可以基於自己的邏輯實現自己的處理器
5.優先級隊列
NiFi允許設置一個或多個優先級方案。默認爲先進先出策略,也可以設置爲後進先出、最老的數據先出、最新的數據先出
6.流式QoS保障
經常有一些數據是非常重要且不能丟失的,需要低延遲處理,NiFi能夠爲這些數據流提供QoS保障。
7.數據跟蹤
NiFi自動記錄對數據流的每一次操作
8.記錄、恢復 歷史數據
NiFi提供數據追蹤記錄功能,用戶能夠對中間過程的內容進行下載和回放。
9.模板
很多數據流模式,是可以複用的。NiFi允許用戶發佈設計模板並共享給其他人
10.安全性
系統間,NiFi可以通過雙向SSL進行數據加密
三、NiFi 組件
1.FlowFile
FlowFile代表每個被系統處理的數據對象。每個FlowFile由兩部分組成:屬性和內容。內容是數據本身,屬性是與數據相關的key-value鍵值對,用於描述數據
2.Processor
Processor可以用來創建、發送、接受、轉換、路由、分割、合併、處理 FlowFiles。Processor可以訪問給定的FlowFile
3.Connection
提供Processors之間的連接,作爲Processors之間的緩衝隊列。用來定義Processors之間的執行關係,並允許不同Processors之間以不同的速度進行交互
4.Process Group
一個特定集合的Processors與他們之間的連接關係形成一個ProcessGroup
6.Controller Service
7.Reporting Task
Reporting Task是一種後臺運行的組件,可將Metrics指標、監控信息、內部NiFi狀態發送到外部
8.Funnel
漏斗是一個NiFi組件,用於將來自多個連接的數據組合成單個連接。
四、系統架構
1.WebServer 提供NiFiWeb界面 和 RestAPI
五、有哪些處理器可用
1.數據轉換
- CompressContent:壓縮或解壓縮內容
- ConvertCharacterSet:用於將一種字符編碼集轉換成另一種
- EncryptContent:加密或解密內容
- ReplaceText:使用正則表達式修改文本內容
- TransformXml:將XSLT轉換應用於XML內容
- JoltTransformJSON:應用JOLT規範來轉換JSON內容
2.路由和調解
- ControlRate:限制數據流量
- DetectDuplicate:根據一些用戶定義的條件監視重複的FlowFiles。經常與HashContent一起使用
- DistributeLoad:通過用戶定義的規則,把某些數據發到特定的Relationship,實現負載均衡
- MonitorActivity:在指定的時間內,沒有任何數據通過流即發送通知,也可選擇在數據流恢復時發送通知
- RouteOnAttribute:根據FlowFile包含的屬性,路由FlowFile
- ScanAttribute:掃描FlowFile的屬性,看是否有匹配的屬性
- RouteOnContent:通過FlowFile內容 路由FlowFile
- ScanContent:掃描FlowFile的內容,看是否有匹配的內容
- ValidateXml:針對XML模式驗證XML內容; 基於用戶定義的XML模式,檢查FlowFile是否有效。
3.數據庫訪問
- ConvertJSONToSQL:將JSON文檔轉換爲SQL INSERT或UPDATE命令,然後將其傳遞給PutSQL處理器
- ExecuteSQL:執行用戶定義的SQL SELECT命令,將結果寫入Avro格式的FlowFile
- PutSQL:通過執行FlowFile內容定義的SQL DDM語句來更新數據庫
- SelectHiveQL:針對Apache Hive數據庫執行用戶定義的HiveQL SELECT命令,將結果以Avro或CSV格式寫入FlowFile
- PutHiveQL:通過執行由FlowFile的內容定義的HiveQL DDM語句來更新Hive數據庫
4.屬性提取
- EvaluateJsonPath:用戶提供JSONPath表達式(與用於XML解析/提取的XPath類似),然後根據JSON內容評估這些表達式,以替換FlowFile內容或將該值提取到用戶命名的屬性中。
- EvaluateXPath:用戶提供XPath表達式,然後根據XML內容評估這些表達式,以替換FlowFile內容,或將該值提取到用戶命名的屬性中。
- EvaluateXQuery:用戶提供XQuery查詢,然後根據XML內容評估此查詢,以替換FlowFile內容或將該值提取到用戶命名的屬性中。
- ExtractText:用戶提供一個或多個正則表達式,然後根據FlowFile的文本內容進行評估,然後將提取的值作爲用戶命名的屬性添加。
- HashAttribute:***對用戶定義的現有屬性列表的並置執行散列函數。
- HashContent:***對FlowFile的內容執行散列函數,並將哈希值作爲屬性添加。
- IdentifyMimeType:評估FlowFile的內容,以便確定FlowFile封裝的文件類型。該處理器能夠檢測許多不同的MIME類型,例如圖像,文字處理器文檔,文本和壓縮格式等
- UpdateAttribute:更新Attribute
5.系統交互
- ExecuteProcess:***運行用戶定義的Operating System命令。進程的StdOut被重定向,使得寫入StdOut的內容成爲出站FlowFile的內容。該處理器是源處理器 - 其輸出預計將生成一個新的FlowFile,並且系統調用預期不會接收輸入。爲了向進程提供輸入,請使用ExecuteStreamCommand處理器。
- ExecuteStreamCommand:***運行用戶定義的Operating System命令。FlowFile的內容可選地流式傳輸到進程的StdIn。寫入StdOut的內容成爲hte出站FlowFile的內容。該處理器不能使用源處理器 - 它必須被饋送進入FlowFiles才能執行其工作。要使用源處理器執行相同類型的功能,請參閱ExecuteProcess Processor。
6.數據接入
- GetFile:將文件的內容從本地磁盤(或網絡連接的磁盤)流入NiFi。
- GetFTP:通過FTP將遠程文件的內容下載到NiFi中。
- GetSFTP:通過SFTP將遠程文件的內容下載到NiFi中。
- GetJMSQueue:從JMS隊列中下載消息,並根據JMS消息的內容創建一個FlowFile。也可以將JMS屬性複製爲屬性。
- GetJMSTopic:從JMS主題下載消息,並根據JMS消息的內容創建一個FlowFile。也可以將JMS屬性複製爲屬性。此處理器支持持久和非持久訂閱。
- GetHTTP:將基於HTTP或HTTPS的遠程URL的內容下載到NiFi中。處理器將記住ETag和Last-Modified Date,以確保數據不會持續攝取。
- ListenHTTP:啓動HTTP(或HTTPS)服務器並監聽傳入連接。對於任何傳入的POST請求,請求的內容將作爲FlowFile寫出,並返回200響應碼。
- ListenUDP:偵聽傳入的UDP數據包,併爲每個數據包或每包數據包創建一個FlowFile(取決於配置),並將FlowFile發送到成功關係。
- GetHDFS:在HDFS中監視用戶指定的目錄。每當一個新的文件進入HDFS,它被複制到NiFi中。該處理器僅在主節點上運行,如果在羣集中運行。爲了從HDFS中複製數據並保持原樣,或者從集羣中的多個節點流出數據,請參閱ListHDFS處理器。
- ListHDFS / FetchHDFS:ListHDFS監視HDFS中用戶指定的目錄,併發出一個FlowFile,其中包含遇到的每個文件的文件名。然後它通過分佈式緩存通過整個NiFi集羣來保持此狀態。然後,這些FlowFiles可以跨羣集扇出,併發送到FetchHDFS處理器,該處理器負責獲取這些文件的實際內容,併發出包含從HDFS獲取的內容的FlowFiles。
- FetchS3Object:從Amazon Web Services(AWS)簡單存儲服務(S3)中獲取對象的內容。出站FlowFile包含從S3接收的內容。
- GetKafka:從Apache Kafka獲取消息,專門用於0.8.x版本。消息可以作爲每個消息的FlowFile發出,或者可以使用用戶指定的分隔符進行批處理。
- GetMongo:對MongoDB執行用戶指定的查詢,並將內容寫入新的FlowFile。
- GetTwitter:允許用戶註冊一個過濾器來收聽Twitter”garden hose” 或Enterprise endpoint,爲收到的每個推文創建一個FlowFile。
7.數據出口/發送數據
- PutEmail:向配置的收件人發送電子郵件。FlowFile的內容可選擇作爲附件發送。
- PutFile:將 FlowFile的內容寫入本地(或網絡連接)文件系統上的目錄。
- PutFTP:將 FlowFile的內容複製到遠程FTP服務器。
- PutSFTP:將 FlowFile的內容複製到遠程SFTP服務器。
- PutJMS:將 FlowFile的內容作爲JMS消息發送到JMS代理,可選擇基於屬性添加JMS屬性。
- PutSQL:作爲SQL DDL語句(INSERT,UPDATE或DELETE)執行 FlowFile的內容。FlowFile的內容必須是有效的SQL語句。可以使用屬性作爲參數,以便FlowFile的內容可以參數化SQL語句,以避免SQL注入攻擊。
- PutKafka:將一個FlowFile的內容作爲消息傳遞給Apache Kafka,專門用於0.8.x版本。FlowFile可以作爲單個消息發送,或者可以指定分隔符,例如新行,以便爲單個FlowFile發送許多消息。
- PutMongo:將 FlowFile的內容作爲INSERT或UPDATE發送到Mongo。
8.分割和聚合
- SplitText:SplitText採用單個FlowFile,其內容爲文本,並根據配置的行數將其拆分爲1個或更多個FlowFiles。例如,處理器可以配置爲將FlowFile拆分成許多FlowFiles,每個FlowFiles只有1行。
- SplitJson:允許用戶將由數組或許多子對象組成的JSON對象拆分爲每個JSON元素的FlowFile。
- SplitXml:允許用戶將XML消息拆分成許多FlowFiles,每個FlowFiles都包含原始的段。當通過“包裝”元素連接幾個XML元素時,通常使用這種方法。然後,該處理器允許將這些元素分割成單獨的XML元素。
- UnpackContent:解壓縮不同類型的歸檔格式,如ZIP和TAR。存檔中的每個文件隨後作爲單個FlowFile傳輸。
- MergeContent:該處理器負責將許多FlowFiles合併到一個FlowFile中。FlowFiles可以通過將其內容與可選的頁眉,頁腳和分隔符連接起來,或者通過指定ZIP或TAR等存檔格式來合併。FlowFiles可以根據一個共同的屬性進行合併,如果被其他Splitting進程拆分,則可以進行“碎片整理”。每個bin的最小和最大大小都是基於元素數量或FlowFiles內容的總大小進行用戶指定的,並且可以分配可選的超時,以便FlowFiles只會等待其指定的時間。
- SegmentContent:根據一些配置的數據大小,將FlowFile分段到潛在的許多較小的FlowFiles中。拆分不是針對任何分隔符而是基於字節偏移來執行的。這是在傳送FlowFiles之前使用的,以便通過並行發送許多不同的片段來提供更低的延遲。另一方面,這些FlowFiles可以由MergeContent處理器使用碎片整理模式進行重新組合。
- SplitContent:將單個FlowFile拆分爲潛在的許多FlowFiles,類似於SegmentContent。但是,對於SplitContent,分割不是在任意字節邊界上執行,而是指定要分割內容的字符串。
9.HTTP
- GetHTTP:將基於HTTP或HTTPS的遠程URL的內容下載到NiFi中。處理器將記住ETag和Last-Modified Date,以確保數據不會持續攝取。
- ListenHTTP:啓動HTTP(或HTTPS)服務器並監聽傳入連接。對於任何傳入的POST請求,請求的內容將作爲FlowFile寫出,並返回200個響應。
- InvokeHTTP:執行由用戶配置的HTTP請求。該處理器比GetHTTP和PostHTTP更加通用,但需要更多的配置。該處理器不能用作源處理器,並且必須具有傳入的FlowFiles才能被觸發以執行其任務。
- PostHTTP:執行HTTP POST請求,發送FlowFile的內容作爲消息的正文。這通常與ListenHTTP一起使用,以便在不能使用Site to Site的情況下(例如,當節點不能直接訪問,但能夠通過HTTP進行通信時)在兩個不同的NiFi實例之間傳輸數據)。注意:HTTP可用作站點到站點運輸協議除了現有的RAW Socket傳輸。它還支持HTTP代理。推薦使用HTTP Site to Site,因爲它具有更高的可擴展性,並且可以使用輸入/輸出端口提供雙向數據傳輸,具有更好的用戶認證和授權。
- HandleHttpRequest / HandleHttpResponse:HandleHttpRequest處理器是一個源處理器,它與ListenHTTP類似地啓動嵌入式HTTP(S)服務器。但是,它不會向客戶端發送響應。相反,FlowFile與HTTP請求的主體一起發送,作爲其作爲屬性的所有典型Servlet參數,標頭等的內容和屬性。HandleHttpResponse可以在FlowFile處理完成後將響應發送回客戶端。這些處理器總是被期望彼此結合使用,並允許用戶在NiFi內直觀地創建Web服務。
10.亞馬遜網絡服務
- FetchS3Object:獲取存儲在Amazon Simple Storage Service(S3)中的對象的內容。然後將從S3檢索的內容寫入FlowFile的內容。
- PutS3Object:使用配置的憑據,密鑰和存儲桶名稱將 FlowFile的內容寫入到Amazon S3對象。
- PutSNS:將 FlowFile的內容作爲通知發送到Amazon Simple Notification Service(SNS)。
- GetSQS:從Amazon Simple Queuing Service(SQS)中提取消息,並將消息的內容寫入FlowFile的內容。
- PutSQS:將 FlowFile的內容作爲消息發送到Amazon Simple Queuing Service(SQS)。
- DeleteSQS:從亞馬遜簡單排隊服務(SQS)中刪除一條消息。這可以與GetSQS一起使用,以便從SQS接收消息,對其執行一些處理,然後只有在成功完成處理後才從隊列中刪除該對象。
六、安裝HDF
|
|
七、參考文檔