前面我們已經介紹完 FlowFiles 了,接下來就是可以一步一步地去建置我們的 Data Pipeline,今天的主角是『Processors』。
在 Day2 的時候,就有提到 Processor 這個名詞,它同時也是撐起在 NiFi 的 Data Pipeline 的重要 componenet 之一。根據官方文件的左手邊可以看到『Processors』底下的種類非常非常多,如果這次的系列文30天都全部介紹的話,還不一定講得完。
所以這裡我先幫各位讀者們去整理一份歸類,先有一個大概的認識:
Processor Categories | Intorduction | Example |
---|---|---|
Data Ingest Processors | 主要就是用來取得資料的 Processors,可能透過 files, ftp, db 等方式 | GenerateFlowFiles, ListFiles, GetFile, GetKafka, GetMongo, GetTwitter... |
Data Transform Processors | 主要就是在做一些 transform, replact, update等操作的 Processors | ReplaceText, ConvertRecord, UpdateRecord, ConvertJsonToSQL... |
Data Egress & Sending Data Processors | 主要 ouput 或 傳送資料到下一個 Destination 的 Processors | PutSlack, PutEmail, PutFile, PutFTP, PutKafka.. |
Routing & Mediation Processors | 以控制 FlowFiles 該往哪一個 connection 流向的 Processors | RouteOnAttribute, RouteOnContent... |
DB Access Processors | 以 Access DB 操作的 Processors(主要偏向可SQL指令的DB) | PutSQL, ExecuteSQL, ListDatabaseTables, QueryDatabaseTable... |
Attribute Extraction Processors | 以 FlowFiles 的 attributes 操作的 Processors | EvaluateJsonPath, EvaluateXPath, ExtractText, UpdateAttribute, LogAttribute... |
Execute Programming Processors | 執行第三方程式(ex. python, go, etc.) 操作的 Processors | ExecuteProcess, ExecuteStreamCommand... |
Splitting & Aggregation Processors | 切分資料或計算處理的 Processors | SplitText, SplitJson, SplitRecord, MergeContent.... |
HTTP & UDP Processors | 透過 HTTP 或 UDP 做資料操作的 Processors,通常用於 API 呼叫居多 | GetHTTP, ListentHTTP, PostHTTP, PutHTTP, PutUDP... |
AWS Processors | AWS 相關操作的 Processors | ListS3, FetchS3Object, PutS3Object, PutSNS, GetSNS, PutSQS, PutDynamoDB, PutLambda... |
GCP Processors | GCP 相關操作的 Processors | ListGCSBucket, PutGCSObject, FetchGCSObject, DeleteGCSObject, ConsumeGCPPubSub, PublishGCPPubSub, PutBigQueryBatch, PutBigQueryStreaming... |
我想各位讀者看到這些應該就已經頭昏眼花了,更何況在這次的系列文當中更不可能全部提到,所以我又再簡化了一些重點,讀者們就可以透過我的重點即可推敲出大多出 Processor 的用途了:
GetXXX
通常代表著『取得』資料轉成 FlowFiles的意思,ex. GetFile,從 Local file 取得資料; GetMongo 就是從 MongoDB 取得資料。
PutXXX:
通常代表著『寫入』、『傳送』的意思,ex. PusSlack 傳送資訊到 slack; PutSQS 將資料傳送到 AWS SQS; PutKafka 將資料傳送到 Kafka。
FetchXXX:
通常代表『取得資料內容』,這通常較常出現在 File 類型,ex. FetchFile, FetchS3Object, FetchGCSObject。你可能會問這和『GetXXX』有什麼差異呢? 以 GetFile 是用來取得 File 的 size, permission, last modified等資訊,而 FetchFile 而是真實將檔案內容以 一個row 的方式轉成一個 FlowFiles,但只有 File 有這樣的差別。
ListXXX:
通常會列出我們指定的 Folder 底下有哪些 Files,並將 Path 回傳出來, ex. ListFiles 回傳本機端的某一個 Folder 底下全部檔案; ListS3 則回傳某一個 AWS S3 Bucket 下的 folder下的所有檔案等。
DeleteXXX:
就是很簡單的刪除資料,ex. DeleteGCSObject 就是刪除 GCS 的檔案; DeleteSQS 就是刪除 SQS等。
RouteOnXXX:
用來決定 Flowfiles 留下的條件,ex. RouteOnAttributes 代表依據 Flowfiles 某一個 attribute 的 value 來決定接下來要走哪一個 Connection。
QueryXXX:
就是對 DB 做資料查詢, ex. QueryCassandra 對 Cassandra 做查詢; QueryDatabaseTable 對 DB 做查詢,但需要搭配 JDBC Driver,如果要對 MySQL 就要指定 MySQL Driver。
ExecuteXXX:
執行 DB Query 或執行 Programing, ex. ExecuteSQL 對 DB 執行 SQL 指令; ExecuteStreamCommand 可用來執行第三方的程式語言等
你會發現,其實在 NiFi 的 Processor 命名其實還蠻單純的,通常就是一個『動作』搭配一個『目的』,所以只要掌握這些原則,其實大多數的 Processor 都能大概知道他的用途,剩下例外的就在查 Document 就可以了。
那接下來就來了解一下如何操作 Processor 吧!
從上面的 gif 可以看到我們是如何將 Processor 拉到主畫面的操作,這裡我也用截圖的方式來呈現一次
在畫面最左方可以看到 『Processor』的圖示,拖拉到主畫面
接著就會呈現所有 Processor 的視窗,根據你的選擇點選你要的 Processor,且點下 Add 就會有你選擇的 Processor 了
透過以上簡單兩的步驟,就可加入我們要的 Processor,但其實 Processor 還是有很多細節,我們繼續看下去
我們可以在 Processor 點擊兩下就可以看到更細節的設定,就會呈現如下畫面:
SETTINGS
這個主要會包含幾個部分,Processor 命名、Processor Type等,其中最重要的是 Automatically Terminate Relationships
,這部分就會得知出該 Processor 可與下游 Processor 建立哪些 Connection,但並不是所有 Connection 都一定要建立,你可以在這邊的設定勾選起來,就代表 terminate,後續 NiFi 也就不會要求你一定要建立這個 Connection 了
SCHEDULE
這裡就是要設定 Schedule 的排程,在 NiFi 有分成兩種方式:
Run Schedule
,直接指定單位,ex. 1 hour, 10 minute 就分別代表每一小時、每10分鐘 triggerㄡRun Schedule
,像 linux 一樣的去設定排成時間,ex. 0 0 13 * * ?
代表安排在每天下午1:00運行。除了以上設定之外,還有以下的設定可以注意:
PROPERTIES
接下來這個部分應該是 Processor 最重要且最複雜的地方,也就是 Processor 的設定,每一個不同 Type 的 Processor 會有不同的 properties 要去做設定,其中黑色粗體的就是必要設定的 key,有些 Processor 的 properties key 很多很複雜,所以通常就要搭配著 Document 來去做確認跟設定對的 value。未來我這邊套用場境時會挑選簡單的 Processor 來讓大家熟悉,隨著操作熟悉之後,其實在設定上也會變得平易近人。
COMMENT
這部分就是來針對該 Processor 做一些簡單的說明和註解,幫助你的團隊成員或是後續你來檢視的時候,就能知道當初為什麼要採用這個 Processor 的原因和目的。
我想經過今天的簡介與簡單的操作,想必讀者們對於如何使用 Processor 有基本的認識了吧!還沒很熟悉的人沒關係,不要急慢慢來。我相信你一定是需要套用真實的場景和案例,你就會比較知道如何上手了,再讓我們等一下,待我在花個幾天把全部 Componenet 操作個別都介紹完之後,我們就可以全部串在一起做使用了,到時候相信你一定可以使用得很得心應手!