Apache Flink的特點與優勢

一、Flink簡介

1.1、Flink的定義

Apache Flink 是一個框架和分佈式處理引擎,用於在無邊界有邊界數據流上進行有狀態的計算。Flink 能在所有常見集羣環境中運行,並能以內存速度和任意規模進行計算。

1.2、Flink的發展

Flink在德語中是快速和靈敏的意思,用來體現流式數據處理器速度快和靈活性強等特點,因此使用棕紅色松鼠圖案其Logo。

Flink在誕生在2010-2014 年間, 由柏林工業大學、 柏林洪堡大學和哈索普拉特納研究所聯合發起名爲“Stratosphere:Information Management on the Cloud”研究項目。2014年4月,Stratosphere代碼被貢獻給Apache軟件基金會, 成爲Apache基金會孵化器項目, 由此,Flink 正式進入社區開發者的視線。

2014 年 12 月,該項目成爲 Apache 軟件基金會頂級項目,從2015年 9 月發佈第一個穩定版本 0.9, 到目前爲止已經發布到 1.9 的版本, 更多的社區開發成員逐步加入,現在Flink在全球範圍內擁有350多位開發人員,不斷有新的特性發布。同時在全球範圍內,越來越多的公司開始使用Flink,在國內比較出名的互聯網公司如阿里巴巴、美團、滴滴等,都在大規模使用 Flink 作爲企業的分佈式大數據處理引擎。

二、Flink的特點與優勢

2.1、同時具備高吞吐、低延遲、高性能特性

Flink是目前開源社區中唯一套集高吞吐、低延遲、高性能三者於一身的分佈式流式數據處理框架。像 Apache Spark 也只能兼顧高吞吐和高性能特性,主要因爲在Spark Streaming 流式計算中無法做到低延遲保障;而流式計算框架 Apache Storm只能支持低延遲和高性能特性,但是無法滿足高吞吐的要求。而滿足高吞吐、低延遲、高性能這三個目標對分佈式流式計算框架來說是非常重要的。

2.2、支持事件時間(Event Time)概念

在流式計算領域中, 窗口計算的地位舉足輕重, 但目前大多數框架窗口計算採用的都是系統時間(Process Time),即事件傳輸到計算框架處理時,系統主機的當前時間。Flink 能夠支持基於事件時間(Event Time)語義進行窗口計算,也就是使用事件產生的時間,這種基於事件驅動的機制使得事件即使亂序到達, 流系統也能夠計算出精確的結果,保持了事件原本產生時的時序性,儘可能避免網絡傳輸或硬件系統的影響。

2.3、支持有狀態計算

Flink 在 1.4 版本中實現了狀態管理,所謂狀態就是在流式計算過程中將算子的中間結果數據保存在內存或者文件系統中, 等下一個事件進入算子後可以從之前的狀態中獲取中間結果中計算當前的結果, 從而無須每次都基於全部的原始數據來統計結果,
種方式極大地提升了系統的性能, 並降低了數據計算過程的資源消耗。 對於數據量大且運算邏輯非常複雜的流式計算場景,有狀態計算髮揮了非常重要的作用。

2.4、支持高度靈活的窗口(Window)操作

在流處理應用中, 數據是連續不斷的, 需要通過窗口的方式對流數據進行一定範圍的聚合計算,例如統計在過去的 1 分鐘內有多少用戶點擊某一網頁,在這種情況下,我們必須定義一個窗口, 用來收集最近一分鐘內的數據, 並對這個窗口內的數據進行再計算。Flink 將窗口劃分爲基於 Time、Count、Session,以及 Data-driven 等類型的窗口操作, 窗口可以用靈活的觸發條件定製化來達到對複雜的流傳輸模式的支持, 用戶可以定義不同的窗口觸發機制來滿足不同的需求。

2.5、基於輕量級分佈式快照(CheckPoint)實現的容錯

內存管理是所有計算框架需要重點考慮的部分,尤其對於計算量比較大的計算場景,數據在內存中該如何進行管理顯得至關重要。針對內存管理,Flink 實現了自身管理內存的機制,儘可能減少 JVM GC 對系統的影響。另外,Flink 通過序列化/反序列化方法將所有的數據對象轉換成二進制在內存中存儲,降低數據存儲的大小的同時,能夠更加有效地對內存空間進行利用,降低 GC 帶來的性能下降或任務異常的風險,因此Flink 較其他分佈式處理的框架會顯得更加穩定,不會因爲 JVM GC 等問題而影響整個應用的運行。

2.6、基於 JVM 實現獨立的內存管理

內存管理是所有計算框架需要重點考慮的部分,尤其對於計算量比較大的計算場景,數據在內存中該如何進行管理顯得至關重要。針對內存管理,Flink 實現了自身管理內存的機制,儘可能減少 JVM GC 對系統的影響。另外,Flink通過序列化/反序列化方法將所有的數據對象轉換成二進制在內存中存儲,降低數據存儲的大小的同時,能夠更加有效地對內存空間進行利用,降低 GC 帶來的性能下降或任務異常的風險,因此Flink 較其他分佈式處理的框架會顯得更加穩定,不會因爲 JVM GC 等問題而影響整個應用的運行。

2.7、Save Points(保存點)

對於 7*24 小時運行的流式應用,數據源源不斷地接入,在一段時間內應用的終止有可能導致數據的丟失或者計算結果的不準確, 例如進行集羣版本的升級、 停機運維操作等操作。值得一提的是Flink 通過 Save Points 技術將任務執行的快照保存在存儲介質上,當任務重啓的時候可以直接從事先保存的 Save Points 恢復原有的計算狀態,使得任務繼續按照停機之前的狀態運行,Save Points 技術可以讓用戶更好地管理和運維實時流式應用。

三、爲什麼要使用Flink

常見流式計算框架的對比

產品 模型 API 保證次數 容錯機制 狀態管理 延時 吞吐量
Storm Native 組合式(基礎API) At-least-once Record  ACK
Trident Micro-Batching 組合式 Exactly-Once Record  ACK 基於操作,每次操作有一個狀態 中等 中等
SparkStreaming Micro-Batching 聲明式高階函數 Exactly-Once 基於RDD做Checkpoint 基於DStream 中等
Flink Native 聲明式 Exactly-Once Checkpoint,Flink的一種快照 基於操作

模型:Storm 和 Flink 是真正的一條一條處理數據;而 Trident(Storm 的封裝框架)和 Spark Streaming 其實都是小批處理,一次處理一批數據(小批量)。
API:Storm 和 Trident 都使用基礎 API 進行開發,比如實現一個簡單的 sum 求和操作;而 Spark Streaming 和 Flink 中都提供封裝後的高階函數,可以直接拿來使用,這樣就比較方便了。
保證次數:在數據處理方面,Storm 可以實現至少處理一次,但不能保證僅處理一次,這樣就會導致數據重複處理問題,所以針對計數類的需求,可能會產生一些誤差;Trident 通過事務可以保證對數據實現僅一次的處理,Spark Streaming和Flink也是
如此。
容錯機制:Storm和Trident可以通過ACK機制實現數據的容錯機制, 而Spark Streaming和 Flink 可以通過 CheckPoint 機制實現容錯機制。狀態管理:Storm 中沒有實現狀態管理,Spark Streaming 實現了基於 DStream 的狀態管理,而 Trident 和 Flink 實現了基於操作的狀態管理。
延時:表示數據處理的延時情況, 因此 Storm 和 Flink 接收到一條數據就處理一條數據,其數據處理的延時性是很低的;而 Trident 和 Spark Streaming 都是小型批處理,它們數據處理的延時性相對會偏高。
吞吐量:Storm 的吞吐量其實也不低,只是相對於其他幾個框架而言較低;Trident 屬於中等;而 Spark Streaming 和 Flink 的吞吐量是比較高的。

綜上,主要是因爲Flink的高吞吐、低延遲、高性能等特性優於其它同類產品,使得越來越多的公司更青睞它。

四、 Flink的應用場景

在實際生產的過程中,大量數據在不斷地產生,例如金融交易數據、互聯網訂單數據、GPS 定位數據、傳感器信號、移動終端產生的數據、通信信號數據等,以及我們熟悉的網絡流量監控、 服務器產生的日誌數據, 這些數據最大的共同點就是實時從不同的數據源中產生,然後再傳輸到下游的分析系統。針對這些數據類型主要包括實時智能推薦、複雜事件處理、實時欺詐檢測、實時數倉與 ETL 類型、流數據分析類型、實時報表類型等實時業務場景,而Flink 對於這些類型的場景都有着非常好的支持。

4.1、實時智能推薦

智能推薦會根據用戶歷史的購買行爲, 通過推薦算法訓練模型, 預測用戶未來可能會購買的物品。對個人來說,推薦系統起着信息過濾的作用,對 Web/App 服務端來說,推薦系統起着滿足用戶個性化需求,提升用戶滿意度的作用。推薦系統本身也在飛速發展,除了算法越來越完善, 對時延的要求也越來越苛刻和實時化。 利用 Flink 流計算幫助用戶構建更加實時的智能推薦系統,對用戶行爲指標進行實時計算,對模型進行實時更新,對用戶指標進行實時預測,並將預測的信息推送給 Wep/App 端,幫助用戶獲取想要的商品信息,另一方面也幫助企業提升銷售額,創造更大的商業價值。

4.2、複雜事件處理

對於複雜事件處理,比較常見的案例主要集中於工業領域,例如對車載傳感器、機械設備等實時故障檢測, 這些業務類型通常數據量都非常大, 且對數據處理的時效性要求非常高。通過利用 Flink 提供的 CEP(複雜事件處理)進行事件模式的抽取,同時應用 Flink 的 Sql進行事件數據的轉換,在流式系統中構建實時規則引擎,一旦事件觸發報警規則,便立即將告警結果傳輸至下游通知系統,從而實現對設備故障快速預警監測,車輛狀態監控等目的。

4.3、實時欺詐檢測

在金融領域的業務中,常常出現各種類型的欺詐行爲,例如信用卡欺詐、信貸申請欺詐等,而如何保證用戶和公司的資金安全,是來近年來許多金融公司及銀行共同面對的挑戰。隨着不法分子欺詐手段的不斷升級,傳統的反欺詐手段已經不足以解決目前所面臨的問題。以往可能需要幾個小時才能通過交易數據計算出用戶的行爲指標, 然後通過規則判別出具有欺詐行爲嫌疑的用戶,再進行案件調查處理,在這種情況下資金可能早已被不法分子轉移,從而給企業和用戶造成大量的經濟損失。 而運用 Flink 流式計算技術能夠在毫秒內就完成對欺詐判斷行爲指標的計算, 然後實時對交易流水進行規則判斷或者模型預測, 這樣一旦檢測出交易中存在欺詐嫌疑, 則直接對交易進行實時攔截, 避免因爲處理不及時而導致的經濟損失。

4.4、實時數倉與 ETL

結合離線數倉, 通過利用流計算諸多優勢和 SQL 靈活的加工能力, 對流式數據進行實時清洗、歸併、結構化處理,爲離線數倉進行補充和優化。另一方面結合實時數據 ETL 處理能力, 利用有狀態流式計算技術, 可以儘可能降低企業由於在離線數據計算過程中調度邏輯的複雜度, 高效快速地處理企業需要的統計結果, 幫助企業更好地應用實時數據所分析出來的結果。

4.5、流數據分析

實時計算各類數據指標, 並利用實時結果及時調整在線系統相關策略, 在各類內容投放、無線智能推送領域有大量的應用。 流式計算技術將數據分析場景實時化, 幫助企業做到實時化分析 Web 應用或者 App 應用的各項指標,包括 App 版本分佈情況、Crash 檢測和分佈等,同時提供多維度用戶行爲分析, 支持日誌自主分析, 助力開發者實現基於大數據技術的精細化運營、提升產品質量和體驗、增強用戶黏性。

4.6、實時報表分析

實時報表分析是近年來很多公司採用的報表統計方案之一, 其中最主要的應用便是實時大屏展示。 利用流式計算實時得出的結果直接被推送到前端應用, 實時顯示出重要指標的變換情況。最典型的案例便是淘寶的雙十一活動,每年雙十一購物節,除瘋狂購物外,最引人注目的就是天貓雙十一大屏不停跳躍的成交總額。 在整個計算鏈路中包括從天貓交易下單購買到數據採集、數據計算、數據校驗,最終落到雙十一大屏上展現的全鏈路時間壓縮在5秒以內,頂峯計算性能高達數三十萬筆訂單/秒,通過多條鏈路流計算備份確保萬無一失。而在其他行業,企業也在構建自己的實時報表系統,讓企業能夠依託於自身的業務數據,快速提取出更多的數據價值,從而更好地服務於企業運行過程中。

 

 

 

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