天天看點

Flink 通過哪些功能支援實時開發了?

作者:散文随風想

Flink 作為現在熱門的實時處理資料的引擎,它具備哪些功能,才能支援流式資料的處理了?

Flink的能夠進行流式處理主要包含取決于它的運作時架構和DataStream API.

Flink的運作時架構主要包括以下五個元件:

1、JobManager:負責整個Flink應用程式的排程和管理,包括作業的送出、排程、任務配置設定等。JobManager還會維護作業的中繼資料,并提供失敗恢複和故障轉移等功能。

2、TaskManager:作為計算節點的角色運作,負責執行具體的任務。每個TaskManager可以執行一個或多個任務,每個任務都會在獨立的線程中執行。TaskManager還負責将資料序列化和反序列化、緩存資料以及進行網絡傳輸。

3、JobGraph:表示Flink應用程式的有向無環圖(DAG),包括作業的任務、任務之間的依賴關系以及算子函數等。JobGraph被JobManager加載和解析,并根據任務的依賴關系生成任務執行圖,然後将任務配置設定給TaskManager執行。

4、ExecutionGraph:表示作業的執行圖,也是任務排程和執行的核心資料結構。ExecutionGraph包含所有任務的執行狀态、排程順序以及任務之間的依賴關系,還包括任務之間的資料流通道和檢查點等。

5、REST API和Web UI:提供了用于監控和管理Flink應用程式的接口和界面。通過REST API可以查詢作業的狀态、擷取作業的詳細資訊,而Web UI則提供了更友好的圖形界面來可視化展示作業的執行情況和性能名額。

JobMaster和TaskExecutor:在高可用模式下,JobManager和TaskManager會部署多個執行個體,其中JobManager的一個執行個體會被選為JobMaster,其他執行個體為JobWorker。JobMaster負責接收和處理來自用戶端的請求,而JobWorker則負責具體的任務執行。以上是Flink的主要運作時架構元件,它們協同工作,實作了Flink應用程式的分布式計算和高可用性。通過這些元件,Flink能夠實作任務的排程、啟動、執行和監控,以及故障恢複和作業管理等功能。

Flink的DataStream API主要有以下三個分類:

一、source 類型,表示Flink 可以支援從哪些類似擷取資料:

1. 讀取檔案:Flink可通過DataStream API中的`readTextFile`方法從文本檔案中讀取資料,并将每行資料作為一個字元串處理。

```java DataStream<String> dataStream = env.readTextFile("path/to/file.txt"); ```

2. 讀取Socket:Flink可通過DataStream API中的`socketTextStream`方法從指定的Socket端口讀取資料,并将每行資料作為一個字元串處理。

3. 自定義Source:Flink允許使用者通過實作SourceFunction接口自定義資料源。使用者可以在自定義的SourceFunction的`run`方法中根據需求生成資料,并使用`Context#collect`方法發送資料到下遊。

4. 從外部系統讀取:Flink提供了多個連接配接外部系統的Connector,如Kafka、RabbitMQ、Redis等。可以使用相應的Connector來讀取這些外部系統的資料。

這些是Flink擷取資料的常見API,根據具體的需求和使用場景,可以選擇合适的API來讀取資料。其中最為常見的是從外部系統讀取資料的方式,例如kafka

二、資料轉換算子API,轉換操作主要包含這些類型:

1. 轉換操作:包括map、flatMap、filter、keyBy、reduce等,用于對流資料進行轉換和操作。

2. 分流操作:包括split和select,用于将一個流分成多個流,并選擇需要的流。

3. 合流操作:包括union、coGroup、connect和coMap等,用于将多個流合并成一個流。

4. 視窗操作:包括window、timeWindow、countWindow等,用于對流資料進行視窗化處理。

5. 狀态操作:包括statefulMap、statefulFlatMap等,用于在操作中維護和使用狀态。

6. 時間操作:包括assignTimestamps、window和watermark等,用于處理和管理事件時間。

7. 連接配接操作:包括join、intervalJoin和coGroup等,用于在流之間進行連接配接操作。

8. 異步操作:包括async、sideOutputLateData等,用于處理異步的操作和遲到的資料。

三、結果資料輸出類型API

1、列印到控制台:Flink可通過DataStream API中的`print`方法将流資料列印輸出到控制台。

2、 寫入檔案:Flink可通過DataStream API中的`writeAsText`方法将流資料寫入文本檔案。

3、寫入Socket:Flink可通過DataStream API中的`writeToSocket`方法将流資料寫入指定的Socket端口。

4、寫入外部緩存系統:Flink提供了多個連接配接外部系統的Connector,如Kafka、RabbitMQ、Redis等。可以使用相應的Connector來将流資料寫入這些外部系統。

5、自定義Sink:Flink允許使用者通過實作SinkFunction接口自定義資料輸出目标。使用者可以在自定義的SinkFunction的`invoke`方法中根據需求将資料寫入指定的目标系統。 包括檔案、HDFS、Elasticsearch等等

這些是Flink常見的結果輸出類型的API,根據具體的需求和輸出目标,可以選擇合适的API來進行結果輸出。

以上是Flink的DataStream API的一些主要分類,不同的分類提供了不同的操作和功能,可以根據具體的需求選擇合适的操作和方法。

以上是Flink 作為實時資料處理的核心功能,通過運作時架構實作分布式的任務排程執行,通過DataStream API進行開發實時處理代碼。

繼續閱讀