Apache Flink基礎

一、Apache Flink 的定義、架構及原理

Apache Flink 是一個分佈式大數據處理引擎,可對有限數據流和無限數據流進行有狀態或無狀態的計算,能夠部署在各種集羣環境,對各種規模大小的數據進行快速計算。

1.Flink 優勢

現有的開源計算方案中,會把流處理和批處理作爲兩種不同的應用類型處理:流處理一般需要低延遲(ms)、Exactly-Once保證(確保數據只消費一次),批處理需要支持高吞吐、高效處理

  • 支持高吞吐、低延遲(ms)、高性能的流處理
  • 支持高度靈活的窗口(window)操作(核心)
  • 有狀態計算的Exactly-Once語義(checkpointing 機制保證了即時在故障發生下也能保障狀態的 exactly once 語義)
  • 提供DataStream API以及DataSet API

2. Flink Application

瞭解 Flink 應用開發需要先理解 Flink 的 Streams、State、Time 等基礎處理語義以及 Flink 兼顧靈活性和方便性的多層次 API。

  • Streams:流,分爲有限數據流與無限數據流,unbounded stream 是有始無終的數據流,即無限數據流;而 bounded stream 是限定大小的有始有終的數據集合,即有限數據流,二者的區別在於無限數據流的數據會隨時間的推演而持續增加,計算持續進行且不存在結束的狀態,相對的有限數據流數據大小固定,計算最終會完成並處於結束的狀態。

  • State,狀態是計算過程中的數據信息,在容錯恢復和 Checkpoint 中有重要的作用,流計算在本質上是 Incremental Processing,因此需要不斷查詢保持狀態;另外,爲了確保 Exactly- once 語義,需要數據能夠寫入到狀態中;而持久化存儲,能夠保證在整個分佈式系統運行失敗或者掛掉的情況下做到 Exactly- once,這是狀態的另外一個價值。

  • Time,分爲 Event time、Ingestion time、Processing time,Flink 的無限數據流是一個持續的過程,時間是我們判斷業務狀態是否滯後,數據處理是否及時的重要依據。

  • API,API 通常分爲三層,由上而下可分爲 SQL / Table API、DataStream API、ProcessFunction 三層,API 的表達能力及業務抽象能力都非常強大,但越接近 SQL 層,表達能力會逐步減弱,抽象能力會增強,反之,ProcessFunction 層 API 的表達能力非常強,可以進行多種靈活方便的操作,但抽象能力也相對越小。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章