flink學習筆記-快速生成Flink項目


說明:本文為《Flink大數據項目實戰》學習筆記,想通過視頻系統學習Flink這個最火爆的大數據計算框架的同學,推薦學習課程:

 

Flink大數據項目實戰:http://t.cn/EJtKhaz

 

1. 快速生成Flink項目

1.推薦開發工具

idea+maven+git

 

 

2.推薦開發語言

Java或者Scala

https://ci.apache.org/projects/flink/flink-docs-release-1.6/quickstart/java_api_quickstart.html

 

3.Flink項目構建步驟

 

1)通過maven構建Flink項目

這里我們選擇構建1.6.2版本的Flink項目,打開終端輸入如下命令:

mvn archetype:generate -DarchetypeGroupId=org.apache.flink -DarchetypeArtifactId=flink-quickstart-java    -DarchetypeVersion=1.6.2

 

 

項目構建過程中需要輸入groupIdartifactIdversionpackage

 

 

然后輸入y確認

然后顯示Maven項目構建成功

 

 

2)打開IDEA導入Flink 構建的maven項目

 

打開IDEA開發工具,點擊open選項

 

 

選擇剛剛創建的Flink項目

 

 

IDEA打開Flink項目

 

 

 

2. Flink BatchWordCount

 

新建一個batch package

 

 

 

打開github Flink源碼,將批處理WordCount代碼copybatch包下。

 

https://github.com/apache/flink/tree/master/flink-examples/flink-examples-batch/src/main/java/org/apache/flink/examples/java/wordcount

 

 

 

打開批處理WordCount代碼:

 

 

 

 

右鍵選擇run,運行Flink批處理WordCount,運行結果如下所示:

 

 

3. Flink StreamWordCount

 

同樣,流處理我們也單獨創建一個包stream

 

 

打開github Flink源碼,將流處理WordCount代碼copystream包下。

 

 

 

https://github.com/apache/flink/tree/master/flink-examples/flink-examples-streaming/src/main/java/org/apache/flink/streaming/examples/wordcount

 

 

打開流處理WordCount代碼:

 

 

 

右鍵選擇run,運行Flink流處理WordCount,運行結果如下所示:

 

 

3Flink核心概念與編程模型

 

1. Flink分層架構

 

1.1 Flink生態之核心組件棧

 

大家回顧一下Flink生態圈中的核心組件棧即可,前面已經詳細講過,這里就不再贅敘。

 

 

 

1.2 Flink分層架構

 

Flink一共分為四個層級,具體如下圖所示:

 

 

Flink 最下面的一層APIStateful Stream Processing,它是Flink最底層的API,控制更靈活但一般很少使用。然后上面一層就是Flink Core(核心)API,它包含DataStreamDataSet API,應用層的用戶經常使用 Core API。然后再上面一層就是 Table API,它相當於在Core API中可以定義數據的Table結構,可以做table操作。最上面一層就是SQL 操作,用戶可以直接使用SQL語句對數據處理,更簡單更方便。

 

 

 

注意:越底層的API越靈活,但越復雜。越上層的API越輕便,但靈活性差。

 

  1. Stateful Stream Processing

 

a)它位於最底層,是Core API 的底層實現。

 

b)它是嵌入到Stream流里面的處理函數(processFunction)。

 

c)當Core API滿足不了用戶需求,可以利用低階API構建一些新的組件或者算子。

 

d)它雖然靈活性高,但開發比較復雜,需要具備一定的編碼能力。

 

  1. Core API

 

a) DataSet API 是批處理API,處理有限的數據集。

 

b) DataStream API是流處理API,處理無限的數據集。

 

  1. Table API & SQL

 

aSQL 構建在Table 之上,都需要構建Table 環境。

 

b)不同的類型的Table 構建不同的Table 環境中。

 

cTable 可以與DataStream或者DataSet進行相互轉換。

 

dStreaming SQL不同於存儲的SQL,最終會轉化為流式執行計划。

 

 

1.3Flink DataFlow

 

Flink DataFlow基本套路:先創建Data Source讀取數據,然后對數據進行轉化操作,然后創建DataSink對數據輸出。

 

 

 

結合代碼和示意圖理解DataFlow

 

 

Flink DataFlow 基本套路如下所示:

 

步驟1:構建計算環境(決定采用哪種計算執行方式)

 

 

 

步驟2:創建Source(可以多個數據源)

 

 

 

步驟3:對數據進行不同方式的轉換(提供了豐富的算子)

 

 

 

步驟4:對結果的數據進行Sink(可以輸出到多個地方)

 

 

 

並行化DataFlow

 

 

從上圖可以看出Source的並行度為2,它們可以並行運行在不同的節點上。Map的並行度也為2source讀取數據后做Stream Partition操作,source1將數據交給map1source2將數據交給map2keyBy(或者window等)的並行度為2map處理后的數據需要經過shuffle操作,然后交給keyBy進行分組統計。Sink的並行度為1keyBy最后分組統計后的數據交給sink,將數據進行輸出操作。

 

 

 

算子間數據傳遞模式

 

 

 

從上圖可以看出,Flink算子間的數據傳遞模式大概分為兩種:

 

 

 

1.One-to-one streams:保持元素的分區和順序,比如數據做map操作。

 

 

 

2.Redistributing streams: 它會改變流的分區,重新分區策略取決於使用的算子

 

keyBy() (re-partitions by hashing the key) :根據hash key對數據重新分區。

 

broadcast():即為廣播操作,比如map1100條數據,發送給keyBy1100條數據,發給keyBy2也是100條數據。

 

rebalance() (which re-partitions randomly):即隨機打散,數據隨機分區發送給下游操作。

 

 

2. Windows

 

前面我們已經了解了FlinkStream流處理和Batch批處理,那么我們這里講的Windows操作是對一段數據進行操作,它可以按照固定數據量進行Windows操作,也可以按照固定時間進行windows操作,它是Stream 流處理所特有的窗口操作。

 

 

 

Flink Windows操作的類型大概分為以下幾類:

 

  1. Count Windows

 

顧名思義,是按照Events的數量進行操作,比如每3Event做一次windows操作。

 

  1. Time Windows

 

基於時間長度進行Windows操作

 

a) Tumbling Windows:即翻滾窗口,不會重疊,比如每隔3s操作一次。

 

b) Sliding Windows:即滑動窗口,有重疊,比如窗口大小為3s,每次向前滑動1s

 

c) Session Windows:類似於Web編程里的Session,以不活動間隙作為窗口進行操作,比如每10s內沒有活動,就會做一次Windows操作。

 

  1. 自定義Windows

 

Flink內置的windows不能滿足用戶的需求,我們可以自定義Windows操作。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM