Flink基礎(二):DS簡介(2) Flink簡介


1 初識 Flink

 

  Flink 項目的理念是:“Apache Flink 是為分布式、高性能、隨時可用以及准確的流處理應用程序打造的開源流處理框架”。
  Apache Flink 是一個框架和分布式處理引擎,用於對無界和有界數據流進行有狀態計算。Flink 被設計在所有常見的集群環境中運行,以內存執行速度和任意規模來執行計算。

 

 

 

 

2 Flink 的重要特點

2.1 事件驅動型(Event-driven)
  事件驅動型應用是一類具有狀態的應用,它從一個或多個事件流提取數據,並根據到來的事件觸發計算、狀態更新或其他外部動作。比較典型的就是以 kafka 為代表的消息隊列幾乎都是事件驅動型應用。 
  與之不同的就是 SparkStreaming 微批次,如圖: 

事件驅動型:
2.2 流與批的世界觀 
   批處理的特點是有界、持久、大量,非常適合需要訪問全套記錄才能完成的計算工作,一般用於離線統計。 
   流處理的特點是無界、實時, 無需針對整個數據集執行操作,而是對通過系統傳輸的每個數據項執行操作,一般用於實時統計。
  在 spark 的世界觀中,一切都是由批次組成的,離線數據是一個大批次,而實時數據是由一個一個無限的小批次組成的。
  而在 flink 的世界觀中,一切都是由流組成的,離線數據是有界限的流,實時數據是一個沒有界限的流,這就是所謂的有界流和無界流。 
  無界數據流:無界數據流有一個開始但是沒有結束,它們不會在生成時終止並提供數據,必須連續處理無界流,也就是說必須在獲取后立即處理 event。對於無界數據流我們無法等待所有數據都到達,因為輸入是無界的,並且在任何時間點都不會完成。處理無界數據通常要求以特定順序(例如事件發生的順序)獲取 event,以便能夠推斷結果完整性。 
  有界數據流:有界數據流有明確定義的開始和結束,可以在執行任何計算之前通過獲取所有數據來處理有界流,處理有界流不需要有序獲取,因為可以始終對有界數據集進行排序,有界流的處理也稱為批處理。
 

這種以流為世界觀的架構,獲得的最大好處就是具有極低的延遲。 

2.3 分層 api 
  最底層級的抽象僅僅提供了有狀態流,它將通過過程函數(Process Function)被嵌入到 DataStream API 中。底層過程函數(Process Function) 與 DataStream API相集成,使其可以對某些特定的操作進行底層的抽象,它允許用戶可以自由地處理來自一個或多個數據流的事件,並使用一致的容錯的狀態。除此之外,用戶可以注冊事件時間並處理時間回調,從而使程序可以處理復雜的計算。
  實際上,大多數應用並不需要上述的底層抽象,而是針對核心 API(Core APIs)進行編程,比如 DataStream API(有界或無界流數據)以及 DataSet API(有界數據集)。這些 API 為數據處理提供了通用的構建模塊,比如由用戶定義的多種形式的轉換(transformations),連接(joins),聚合(aggregations),窗口操作(windows)等等。DataSet API 為有界數據集提供了額外的支持,例如循環與迭代。這些 API
處理的數據類型以類(classes)的形式由各自的編程語言所表示。
  Table API 是以表為中心的聲明式編程,其中表可能會動態變化(在表達流數據時)。Table API 遵循(擴展的)關系模型:表有二維數據結構(schema)(類似於關系數據庫中的表),同時 API 提供可比較的操作,例如 select、project、join、group-by、aggregate 等。Table API 程序聲明式地定義了什么邏輯操作應該執行,而不是准確地確定這些操作代碼的看上去如何。 
  盡管 Table API 可以通過多種類型的用戶自定義函數(UDF)進行擴展,其仍不如核心 API 更具表達能力,但是使用起來卻更加簡潔(代碼量更少)。除此之外,Table API 程序在執行之前會經過內置優化器進行優化。 
  你可以在表與 DataStream/DataSet 之間無縫切換,以允許程序將 Table API 與DataStream 以及 DataSet 混合使用
  Flink 提供的最高層級的抽象是 SQL 。這一層抽象在語法與表達能力上與Table API 類似,但是是以 SQL 查詢表達式的形式表現程序。SQL 抽象與 Table API交互密切,同時 SQL 查詢可以直接在 Table API 定義的表上執行。 
  目前 Flink 作為批處理還不是主流,不如 Spark 成熟,所以 DataSet 使用的並不是很多。Flink Table API 和 Flink SQL 也並不完善,大多都由各大廠商自己定制。所以我們主要學習 DataStream API 的使用。實際上 Flink 作為最接近 Google DataFlow模型的實現,是流批統一的觀點,所以基本上使用 DataStream 就可以了。 
  Flink 幾大模塊
      1) Flink Table & SQL(還沒開發完)
      2)Flink Gelly(圖計算)
      3)Flink CEP(復雜事件處理)


免責聲明!

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



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