關於Apache Flink的那些子專案,你瞭解多少?

danny_2018發表於2022-11-29

提到實時計算或者流計算,我們很自然地會想到Flink。如今,Flink已成為實時計算的事實標準,很多大型網際網路企業的實時推薦、實時ETL、實時數倉、實時風控等場景,也都是基於Apache Flink加各種開源的OLAP引擎構建。那麼,Flink到底是如何以Pipeline(管道)的模式,完成實時業務場景支撐的呢?本文將對Apache Flink幾個子專案進行彙總!

1、 Flink CDC 資料整合

Flink CDC是Apache Flink的一個重要元件,是一款非常優秀的流處理引擎。廣義概念上,只要是能夠捕獲資料變更的技術,都可以成為是CDC。目前通常描述的CDC技術主要面向資料庫的變更,是一種用於捕獲資料庫中資料變更的技術。CDC的應用非常廣泛,支援從 MySQL、MariaDB、RDS MySQL等資料庫中實時地讀取存量歷史資料和增量變更資料,整個過程提供 exactly-once 語義保證。

作為新一代資料整合框架,Flink CDC可以看做是資料從源頭連線到資料倉儲的管道,可遮蔽一切複雜問題,讓使用者專注於資料分析,包括資料遷移、資料分發、資料採集等。Flink CDC 同時提供了 SQL API 和 DataStream API 兩套 API,很好地滿足了不同開發者的需求。

Flink CDC 既可以替代傳統的 DataX 和 Canal 工具做實時資料同步,將資料庫的全量和增量資料一體化地同步到訊息佇列和資料倉儲中;也可以做實時資料整合,將資料庫資料實時入湖入倉;同時還支援強大的資料加工能力,可以透過 SQL 對資料庫資料做實時關聯、打寬、聚合,並將物化結果寫入到各種儲存中。相對於其他資料整合框架,Flink CDC 具有全增量一體化、無鎖讀取、併發讀取、分散式架構等技術優勢,因此在開源社群中非常受歡迎。

2、Flink SQL資料分析

Flink能快速發展,和Flink SQL的誕生息息相關。最早,Flink雖然有著自身技術的先進性,但很多企業無法使用,學習成本高。有了Flink SQL以後,使用者可以基於熟悉的SQL語義使用Flink。

準確來講,Flink SQL是Flink 實時計算為簡化計算模型、降低使用者使用實時計算門檻而設計的一套符合標準 SQL 語義的開發語言。 自 2015 年開始,阿里巴巴開始調研開源流計算引擎,最終決定基於 Flink 打造新一代計算引擎,針對 Flink 存在的不足進行最佳化和改進,並且在 2019 年初將最終程式碼開源,也就是很多人熟悉的Blink。Blink在原來的 Flink 基礎上最重要的一個貢獻就是實現了Flink SQL 。

在傳統的流式計算領域,比如 Storm、Spark Streaming 都會提供一些 Function 或者 Datastream API,使用者透過 Java 或 Scala 寫業務邏輯,這種方式雖然靈活,但有一些不足,比如具備一定門檻且調優較難,隨著版本的不斷更新,API 也出現了很多不相容的地方。此種背景下,Flink SQL成為優選,不同行業和領域的人都熟悉,學習成本較低,使用者只要表達清楚需求即可,不需要了解具體做法。

3、 Flink ML機器學習

Apache Flink的機器學習庫稱為Flink ML。由於過去五年來機器學習的使用呈指數增長,因此Flink社群決定將這種機器學習APO也新增到其生態系統中。在FlinkML中,貢獻者和演算法的列表正在增加。

具體而言,開發團隊重構了Flink ML早期的函式庫,擴充套件Flink ML API並更新Runtime主要功能,比如:開始支援多輸入和多輸出,和新增流媒體批次統一函式庫等。另外,Flink ML新增了5個演算法例項,包括對數機率迴歸、k-means、K-近鄰演算法、單純貝氏分類器以及One-hot編碼器,除了加入新的演算法外,官方也會持續進行壓力測試和最佳化,確保演算法的效能。

傳統的Estimator/Transformer正規化,並不提供API以流媒體的方式暴露模型資料,因此使用者就許要反覆呼叫fit來更新模型資料,官方表示,使用者雖然可以每隔數分鐘更新一次模型資料,但是這種方法效率非常差。而新版本中提供了getModelData API,供使用者將資料模型即時傳輸到網頁伺服器,並使用最新的模型資料進行線上推理,這項功能可以明顯強化Flink ML的線上學習應用能力。目前,Flink ML已成為Apache Flink流媒體處理框架的一部分,提供機器學習API和基礎設施函式庫,能夠簡化機器學習工作管線構建工作。

4、 Flink CEP規則引擎

CEP 是複雜事件處理(Complex Event Process,簡稱CEP)的縮寫,主要用來檢測無盡資料流中的複雜模式,擁有從不同的資料行中辨識查詢模式的能力。模式匹配是複雜事件處理的一個強大援助。

CEP 本身並沒有脫離實時計算的範疇,所以絕大部分使用者還是選擇基於 Flink,或者已有的計算服務上去搭建相關的框架,CEP 對應的功能更多是以 library 的形式存在。對於大多數 CEP 的應用場景而言,“複雜規則”的制定者通常是運營、商家、市場等非技術同學,對於大多數 CEP 的業務效果而言,通常是短時間內直接觸達使用者。

Flink CEP是基於Flink Runtime構建的實時資料規則引擎,擅長解決跨事件的匹配問題。如:結合了時序的上下文風控場景,識別了作弊的行為序列後,給「先做 xx,後做 xx,再做 xx」的使用者進行封禁;結合了否定語義的電商營銷場景,給「瀏覽商品後 10 分鐘未下單的使用者」傳送優惠券。

5、 Flink Table Store動態表儲存

作為Apache Flink 的一個子專案,Flink Table Store 是Flink在推動流批一體演進中儲存領域上的重要一環。

Flink 在 Table API 和 SQL 中提出了動態表的概念,跟 Hive 表在離線數倉中間層的作用類似,動態表是實時資料倉儲的中間層。動態表中資料是隨時間變化的,而靜態表只能包含離線處理的資料。我們可以將實時計算看成對動態表上變更資料的處理,將離線計算看成對動態表某個時間快照的處理。使用者可以像查詢批處理表一樣查詢動態表,對動態表的查詢將生成一個不會停止的連續查詢,並且不斷更新下游的結果表,以反映輸入動態表上的更改,這構成了實時數倉的基本鏈路。本質上,動態表上的連續查詢非常類似於定義物化檢視的查詢。

整體來說, Flink Table Store是解決存算分離、儲存統一的重要元件。Flink Table Store是一個流批統一的儲存,能提供一定的 OLAP 查詢能力(基於列式儲存),可做到毫秒級別的實時流式讀取,能夠支援 Insert Overwrite。同時,Flink Table Store也是最為完善的 Flink Connector,支援 Flink SQL 的全部概念,支援任意 Flink Job 的輸出,支援所有資料型別。更重要的是,還能夠結合 Flink SQL 提供 DB 級別的體驗,並且支援大規模更新。

2022年,Apache Flink已經更新到1.16版,有了諸多更新,包括:分散式一致性快照架構升級、創新流批自適應融合 Shuffle、基於非同步與快取技術的流式 SQL維表Join 改進、完整相容 Hive 生態、PyFlink 功能及效能全面生產可用等。針對社群基於 DataStream API 重新建設的Flink ML,目前已經發布了兩個版本。另外,在Streaming Data Warehouse 流式數倉方面的探索,也是值得重點關注的方向。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31547898/viewspace-2925753/,如需轉載,請註明出處,否則將追究法律責任。

相關文章