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

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

 

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

 

1. 快速生成Flink項目

1.推薦開發工具git

idea+maven+gitgithub

 

 

2.推薦開發語言apache

Java或者Scala編程

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

 

3.Flink項目構建步驟api

 

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操做。

 

相關文章
相關標籤/搜索