官术网_书友最值得收藏!

2.1 Flink應用開發

上一章簡要地介紹了Flink的設計理念、特點、生態與技術棧、運行架構,在深入Flink之前,還有必要對Flink內部的一些核心概念、流程進行總體性的闡述。

Flink作為批流一體的計算引擎,其面對的是業務場景,面向的使用者是開發人員和運維管理人員。

Flink應用程序(簡稱Flink應用),也叫作Flink作業、Flink Job。Flink作業包含了兩個基本的塊:數據流(DataStream)和轉換(Transformation)。DataStream是邏輯概念,為開發者提供了API接口,Transformation是處理行為的抽象,包含了數據的讀取、計算、寫出。所以Flink的作業中的DataStream API調用,實際上構建了多個由Transformation組成的數據處理流水線(Pipeline)。

DataStream API和Transformation的轉換如圖2-1所示。

圖2-1 Flink DataStream API與Transformation的轉換

執行時,Flink應用被映射成Dataflow,由數據流和轉換操作組成。每個Dataflow從一個或多個數據源開始,并以一個或多個Slink輸出結束。Dataflow本質上是一個有向無環圖(DAG),但是允許通過迭代構造允許特殊形式的有向有環圖。為了簡單起見,大部分任務都是有向無環圖。

Flink應用由相同的基本部分組成。

(1)獲取參數(可選)

如果有配置參數,則讀取配置參數,可以是命令行輸入的參數,也可以是配置文件(配置文件可能是命令行給的1個配置文件路徑)。

(2)初始化Stream執行環境

這是必須要做的,讀取數據的API依賴于該執行環境。

(3)配置參數

讀取到的參數可以是執行環境參數或者業務參數。執行環境參數調用對應的API賦予即可,這些參數會覆蓋flink.conf中默認的配置參數,如最大并行度maxParallism等。如果是業務級的參數,可以放入GlobalJobParameters中,在Job執行時從GlobalJobParameters讀取參數。

一般在生產或者實際的應用場景中,多多少少需要提供一些配置信息,如果只是為了學習用途,則可以不用考慮。

GlobalJobParameters可以視作一個Map,執行環境參數等具體細節可以參照官方文檔的詳細說明。

(4)讀取外部數據

Flink作為分布式執行引擎,本身沒有數據存儲能力,所以定義了一系列接口、連接器與外部存儲進行交互,讀寫數據。

在Flink中,數據來源叫作Source,Flink支持從Kafka、HDFS、HBase、數據庫等外部存儲讀取數據。

(5)數據處理流程

調用DataStream的API組成數據處理的流程,如調用DataStream.map().filter()...組成一個數據處理流水線。

(6)將處理結果寫入外部

在Flink中將數據寫入外部的過程叫作Sink,Flink支持寫出數據到Kafka、HDFS、HBase、數據庫等外部存儲。

(7)觸發執行

StreamExecutionEnvironment#execute是Flink應用執行的觸發入口,無論是一般的DataStream API開發還是Table &SQL開發都是如此。

調用該API之后,才會觸發后續的一系列生成StreamGraph、JobGraph、ExecutionGraph和任務分發執行的過程。

主站蜘蛛池模板: 深圳市| 翁牛特旗| 南丰县| 乐安县| 施甸县| 溆浦县| 河源市| 始兴县| 独山县| 新蔡县| 任丘市| 拉萨市| 乐陵市| 丹寨县| 壤塘县| 凤阳县| 儋州市| 白朗县| 山东| 县级市| 新沂市| 南康市| 巩留县| 彰武县| 苍溪县| 日喀则市| 马公市| 永州市| 和田市| 太仆寺旗| 宝兴县| 崇明县| 灵石县| 南和县| 清河县| 陵水| 密山市| 昭通市| 襄樊市| 六安市| 郁南县|