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

3.1.2 流應用程序實現

Flink程序的基本構建塊是stream和transformation(流和轉換)。從概念上講,stream是數據記錄的流(可能永遠不會結束),transformation是一個運算,它接收一個或多個流作為輸入,經過處理/計算后生成一個或多個輸出流。

下面實現一個完整的可工作的Flink流應用程序示例。

【示例3-1】 將有關人員的記錄流作為輸入,并從中篩選出未成年人信息。

Scala代碼如下:

(1)在IntelliJ IDEA中創建一個Flink項目,使用flink-quickstart-scala項目模板(Flink項目的創建過程可參考2.2節)。

(2)設置依賴。在pom.xml文件中添加以下依賴內容:

(3)創建主程序StreamingJobDemo1,編輯流處理代碼如下:

執行以上代碼,輸出結果如下:

Java代碼如下:

(1)在IntelliJ IDEA中創建一個Flink項目,使用flink-quickstart-Java項目模板(Flink項目的創建過程可參考2.2節)。

(2)設置依賴。在pom.xml文件中添加以下依賴內容:

(3)創建一個POJO類,用來表示流中的數據,代碼如下:

(4)打開項目中的StreamingJob對象文件,編輯流處理代碼如下:

(5)執行以上程序,輸出結果如下。

注意:Flink將批處理程序作為流程序的一種特殊情況執行,其中流是有界的(有限數量的元素)。DataSet在內部被視為數據流,因此,上述概念同樣適用于批處理程序,也適用于流程序,只有少數例外:

(1)批處理程序的容錯不使用檢查點。錯誤恢復是通過完全重放流實現的,這使恢復的成本更高,但是因為它避免了檢查點,所以使常規處理更輕量。

(2)DataSet API中的有狀態運算使用簡化的in-memory/out-of-核數據結構,而不是key-value索引。

(3)DataSet API引入了特殊的同步(基于superstep)迭代,這只可能在有界流上實現。

主站蜘蛛池模板: 瑞昌市| 西城区| 盐亭县| 吉木乃县| 阿合奇县| 奈曼旗| 北流市| 祁阳县| 昌图县| 乌鲁木齐县| 富平县| 古浪县| 潢川县| 双江| 韶关市| 泊头市| 开远市| 东乌珠穆沁旗| 榕江县| 密云县| 阿巴嘎旗| 阿巴嘎旗| 扎赉特旗| 吕梁市| 鄂托克旗| 祁阳县| 射洪县| 定陶县| 保山市| 博野县| 桐城市| 高陵县| 肇东市| 丽江市| 东明县| 诸暨市| 牙克石市| 吴忠市| 祥云县| 新乡市| 高尔夫|