Flink基礎概念入門

    Apache Apache Flink 是一個開源的流處理框架,應用於分佈式、高性能、高可用的數據流應用程序。可以處理有限數據流和無限數據,即能夠處理有邊界和無邊界的數據流。無邊界的數據流就是真正意義上的流數據,所以 Flink 是支持流計算的。有邊界的數據流就是批數據,所以也支持批處理的。不過 Flink 在流處理上的應用比在批處理上的應用更加廣泛,統一批處理和流處理也是 Flink 目標之一。Flink 可以部署在各種集羣環境,可以對各種大小規模的數據進行快速計算。

  • 2010~2014Flink 起源於柏林理工大學的研究性項目 Stratosphere
  • 2014 年該項目被捐贈給 Apache 軟件基金會
  • 2014 年 12 月 Flink 一躍成爲 Apache 軟件基金會的頂級項目之一

在德語中,Flink 一詞表示快速和靈巧,項目採用一隻松鼠的彩色圖案作爲 logo,這不僅是因爲松鼠具有快速和靈巧的特點,還因爲柏林的松鼠有一種迷人的紅棕色,而 Flink 的松鼠 logo 擁有可愛的尾巴,尾巴的顏色與 Apache 軟件基金會的 logo 顏色相呼應,也就是說,這是一隻 Apache 風格的松鼠

Flink 有如下特點:

  • 批流一體:統一批處理和流處理
  • 分佈式:Flink 程序可以運行在分佈式環境下
  • 高性能
  • 高可用
  • 準確性:Flink 可以保證數據處理的準確性

Flink 主要應用於流式數據分析場景

  • 實時 ETL

Extraction-Transformation-Loading 的縮寫,中文名稱爲數據抽取、轉換和加載.

集成流計算現有的諸多數據通道和 SQL 靈活的加工能力,對流式數據進行實時清晰、歸併和結構化處理;同時,對離線數倉進行有效的補充和優化,併爲數據實時傳輸提供可計算通道。

  • 實時報表

實時化採集,加工流式數據存儲;實時監控和展現業務、客戶各類指標,讓數據化運營實時化。

  • 監控預警

對系統和用戶行爲進行實時監測和分析,以便及時發現危險行爲。

  • 在線系統

實時計算各類數據指標,並利用實時結果及時調整在線系統的相關策略,並應用於內容投放、智能推送領域。

Flink 核心組成

  • Deploy 層:
    Flink 支持本地運行、能在獨立集羣或者在被 YARN 或 Mesos 管理的集羣上運行,也能部署在雲上
  • Core 層:
    Flink 的核心是分佈式流式數據引擎,意味着數據以一次一個事件的形式被處理
  • API 層:
    DataStream、DataSet、Table、SQL API
  • 擴展庫:Flink 還包括了用於複雜事件處理、機器學習、圖像處理和 Apache Storm 兼容的專用代碼庫

Flink 生態發展

  • 輸入 Connectors(左側部分)

    • 流處理方式:包含 Kafka、AWS kinesis(實時數據流服務)、RabbitMQ、NIFI(數據管道)、Twitter(API)

    • 批處理方式:包含 HDFS、HBase、Amazon S3(文件系統)、MapR FS(文件系統)、ALLuxio(基於內存的分佈式文件系統)

  • 中間是 Flink 核心部分

  • 輸出 Connectors(右側部分)

    • 流處理方式:包含 Kafka、AWS kinesis(實時數據流服務)、RabbitMQ、NIFI(數據管道)、Cassandra(NoSQL 數據庫)、ES、HDFS rolling file(滾動文件)

    • 批處理方式:包含 HBase、HDFS

流處理引擎的技術選型

計算框架對比圖

產品 模型 API 保證次數 容錯機制 狀態管理 延時 吞吐量
storm Native(數據進入立即處理) 組合式 At-least-once Record ACKS Low Low
Trident mirco-batching(劃分爲小批處理) 組合式 Exectly-once Record ACKs 基於操作(每次操作由一個狀態) Medium Medium
Spark streaming mirco-batching 聲明式(提供封裝後的高階函數) Exectly-once RDD Checkpoint 基於 DStream Medium High
Flink Native 聲明式 Exectly-once Checkpoint 基於操作 Low Hign

市面上的流處理引擎不止 Flink 一種,其他的比如 Storm、SparkStreaming、Trident 等,如何進行選型,給大家一些建議:

  • 流數據要進行狀態管理,選擇使用 Trident、Spark Streaming 或者 Flink
  • 消息傳遞需要保證 At-least-once(至少一次)或者 Exacly-once(僅一次)不能選擇 Storm
  • 對於小型獨立項目,有低延遲要求,可以選擇使用 Storm,更簡單
  • 如果項目已經引入了 Spark,實時處理需求可以滿足的話,建議直接使用 Spark 中的 Spark Streaming
  • 消息投遞要滿足 Exactly-once(僅一次),數據量大、有高吞吐、低延遲要求,要進行狀態管理或窗口統計,建議使用 Flink
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章