Flink基本原理與應用場景

Real_man發表於2019-04-11

Flink是一個開源的分散式,高效能,高可用,準確的流處理框架。主要由Java程式碼實現,支援實時流處理和批處理,批資料只是流資料的一個極限案例。支援了迭代計算,記憶體管理和程式優化。

重點記得Flink是一個流處理框架,支援實時處理。

Flink特點

圖片的左邊 是資料來源,右邊是資料可以輸出到什麼地方

image-20190411171511680

  • 流式優先:Flink是一個流式處理框架,可以實現流式資料的連續處理
  • 容錯:有容錯機制,可以保證資料有狀態的計算,記錄資料的狀態,如果資料處理失敗了,可以再恢復到原來的狀態
  • 可伸縮:可以支援上千個節點
  • 效能:高吞吐,低延遲,高吞吐就是表示這個程式在單位時間內,可以達到很大的資料量處理,並且在很短的時間內處理掉。

Flink架構

Flink是一個分層次的系統。

Image result for flink architecture diagram

  • 部署層面上:可以單擊,叢集,雲上部署,在工作中YARN場景比較多
  • 核心層面上:有一個分散式的流式資料處理引擎
  • API層面上:有流式處理API,批處理API。流式處理的支援事件處理,表操作。批處理的,支援機器學習,圖計算,也支援表操作。

基本元件

看下Flink到底有哪些元件

image-20190411074628454

img

  • 首先要有資料來源,負責接收資料
  • 中間就是進行計算的部分,具體對資料處理的地方
  • 最終資料輸出的地方,把結果儲存到某些地方

流處理與批處理

流處理系統與批處理系統最大不同在於節點間的資料傳輸方式,這兩種資料傳輸模式是兩個極端,對應的是流處理系統對低延遲的要求和批處理系統對高吞吐量的要求。

  • 對於一個流處理系統,其節點間資料傳輸的標準模型是:當一條資料被處理完成後,序列化到快取中,然後立刻通過網路傳輸到下一個節點,由下一個節點繼續處理

  • 而對於一個批處理系統,其節點間資料傳輸的標準模型是:當一條資料被處理完成後,序列化到快取中,並不會立刻通過網路傳輸到下一個節點,當快取寫滿,就持久化到本地硬碟上,當所有資料都被處理完成後,才開始將處理後的資料通過網路傳輸到下一個節點

Flink的執行引擎同時支援了這兩種資料傳輸模型

  • Flink以固定的快取塊為單位進行網路資料傳輸,使用者可以通過設定快取塊超時值指定快取塊的傳輸時機。如果快取塊的超時值為0,則Flink的資料傳輸方式類似上文所提到流處理系統的標準模型,此時系統可以獲得最低的處理延遲

  • 如果快取塊的超時值為無限大,則Flink的資料傳輸方式類似上文所提到批處理系統的標準模型,此時系統可以獲得最高的吞吐量

  • 同時快取塊的超時值也可以設定為0到無限大之間的任意值。快取塊的超時閾值越小,則Flink流處理執行引擎的資料處理延遲越低,但吞吐量也會降低,反之亦然。通過調整快取塊的超時閾值,使用者可根據需求靈活地權衡系統延遲和吞吐量

最後

學習下大資料方面的知識,這裡主要介紹了Flink的基本原理與使用場景

參考

相關文章