什么是Flink?Flink能用来做什么?
文章目錄
- 概述
- 特點
- 應用場景
- Flink VS Spark Streaming
概述
Flink是什么?Apache Flink 是一個框架和分布式處理引擎,用于在無邊界和有邊界數據流上進行有狀態的計算。Flink 能在所有常見集群環境中運行,并能以內存速度和任意規模進行計算。
Apache Flink 功能強大,支持開發和運行多種不同種類的應用程序。它的主要特性包括:批流一體化、精密的狀態管理、事件時間支持以及精確一次的狀態一致性保障等。Flink 不僅可以運行在包括 YARN、 Mesos、Kubernetes 在內的多種資源管理框架上,還支持在裸機集群上獨立部署。在啟用高可用選項的情況下,它不存在單點失效問題。事實證明,Flink 已經可以擴展到數千核心,其狀態可以達到 TB 級別,且仍能保持高吞吐、低延遲的特性。世界各地有很多要求嚴苛的流處理應用都運行在 Flink 之上。
接下來,我們來介紹一下Flink中的幾個重要概念。
批與流
-
批處理的特點是有界、持久、大量,非常適合需要訪問全套記錄才能完成的計算工作,一般用于離線統計。
-
流處理的特點是無界、實時, 無需針對整個數據集執行操作,而是對通過系統傳輸的每個數據項執行操作,一般用于實時統計。
在Spark的世界觀中,一切都是由批次組成的,離線數據是一個大批次,而實時數據是由一個一個無限的小批次組成的。而在Flink的世界觀中,一切都是由流組成的,離線數據是有界限的流,實時數據是一個沒有界限的流,這就是所謂的有界流和無界流。
- 無界流:有定義流的開始,但沒有定義流的結束。它們會無休止地產生數據。無界流的數據必須持續處理,即數據被攝取后需要立刻處理。我們不能等到所有數據都到達再處理,因為輸入是無限的,在任何時候輸入都不會完成。處理無界數據通常要求以特定順序攝取事件,例如事件發生的順序,以便能夠推斷結果的完整性。
- 有界流:有定義流的開始,也有定義流的結束。有界流可以在攝取所有數據后再進行計算。有界流所有數據可以被排序,所以并不需要有序攝取。有界流處理通常被稱為批處理。
Flink 擅長處理無界和有界數據集 精確的時間控制和狀態化使得Flink的運行時(runtime)能夠運行任何處理無界流的應用。有界流則由一些專為固定大小數據集特殊設計的算法和數據結構進行內部處理,產生了出色的性能。
部署應用到任何地方
Apache Flink 是一個分布式系統,它需要計算資源來執行應用程序。Flink 集成了所有常見的集群資源管理器,例如Hadoop YARN、 Apache Mesos和 Kubernetes,但同時也可以作為獨立集群運行。
Flink 被設計為能夠很好地工作在上述每個資源管理器中,這是通過資源管理器特定(resource-manager-specific)的部署模式實現的。Flink 可以采用與當前資源管理器相適應的方式進行交互。
部署 Flink 應用程序時,Flink 會根據應用程序配置的并行性自動標識所需的資源,并從資源管理器請求這些資源。在發生故障的情況下,Flink 通過請求新資源來替換發生故障的容器。提交或控制應用程序的所有通信都是通過 REST 調用進行的,這可以簡化 Flink 與各種環境中的集成。
利用內存性能
有狀態的 Flink 程序針對本地狀態訪問進行了優化。任務的狀態始終保留在內存中,如果狀態大小超過可用內存,則會保存在能高效訪問的磁盤數據結構中。任務通過訪問本地(通常在內存中)狀態來進行所有的計算,從而產生非常低的處理延遲。Flink 通過定期和異步地對本地狀態進行持久化存儲來保證故障場景下精確一次的狀態一致性。
分層API
Flink 根據抽象程度分層,提供了三種不同的 API。每一種 API 在簡潔性和表達力上有著不同的側重,并且針對不同的應用場景。
Flink分層API- ProcessFunction:可以處理一或兩條輸入數據流中的單個事件或者歸入一個特定窗口內的多個事件。它提供了對于時間和狀態的細粒度控制。開發者可以在其中任意地修改狀態,也能夠注冊定時器用以在未來的某一時刻觸發回調函數。因此,你可以利用ProcessFunction實現許多有狀態的事件驅動應用所需要的基于單個事件的復雜業務邏輯。
- DataStream API:為許多通用的流處理操作提供了處理原語。這些操作包括窗口、逐條記錄的轉換操作,在處理事件時進行外部數據庫查詢等。DataStream API 支持 Java 和 Scala 語言,預先定義了例如map()、reduce()、aggregate() 等函數。你可以通過擴展實現預定義接口或使用 Java、Scala 的 lambda 表達式實現自定義的函數。
- SQL & Table API:Flink 支持兩種關系型的 API,Table API 和 SQL。這兩個 API 都是批處理和流處理統一的 API,這意味著在無邊界的實時數據流和有邊界的歷史記錄數據流上,關系型 API 會以相同的語義執行查詢,并產生相同的結果。Table API和SQL借助了 Apache Calcite來進行查詢的解析,校驗以及優化。它們可以與DataStream和DataSet API無縫集成,并支持用戶自定義的標量函數,聚合函數以及表值函數。Flink 的關系型 API 旨在簡化數據分析、數據流水線和 ETL 應用的定義。
特點
Apache Flink是一個集合眾多具有競爭力特性于一身的第三代流處理引擎,它的以下特點使得它能夠在同類系統中脫穎而出。
- Flink是目前開源社區中唯一一套集高吞吐、低延遲、高性能三者于一身的分布式流式處理框架。像Apache Spark也只能兼顧高吞吐和高性能特性,主要因為在Spark Streaming流式計算中無法做到低延遲保障;而流式計算框架Apache Storm只能支持低延遲和高性能特性,但是無法滿足高吞吐的要求。
- 在流式計算領域中,窗口計算的地位舉足輕重,但目前大多數框架窗口計算采用的都是處理時間,也就是事件傳輸到計算框架處理時系統主機的當前時間。Flink能夠支持基于事件時間語義進行窗口計算,也就是使用事件產生的時間,這種基于事件驅動的機制使得事件即使亂序到達,流系統也能夠計算出精確的結果,保證了事件原本的時序性。
- 所謂狀態就是在流式計算過程中將算子的中間結果數據保存著內存或者文件系統中,等下一個事件進入算子后可以從之前的狀態中獲取中間結果中計算當前的結果,從而不須每次都基于全部的原始數據來統計結果,這種方式極大地提升了系統的性能,并降低了數據計算過程的資源消耗。
- Flink能夠分布式運行在上千個節點上,將一個大型計算任務的流程拆解成小的計算過程,然后將Task分布到并行節點上進行處理。在任務執行過程中,能夠自動發現事件處理過程中的錯誤而導致的數據不一致問題,在這種情況下,通過基于分布式快照技術的Checkpoints,將執行過程中的狀態信息進行持久化存儲,一旦任務出現異常終止,Flink就能夠從Checkpoints中進行任務的自動恢復,以確保數據中處理過程中的一致性。
- 支持高可用性配置(無單點失效),和Kubernetes、YARN、Apache Mesos緊密集成,快速故障恢復,動態擴縮容作業等?;谏鲜鎏攸c,它可以7 X 24小時運行流式應用,幾乎無須停機。當需要動態更新或者快速恢復時,Flink通過Savepoints技術將任務執行的快照保存在存儲介質上,當任務重啟的時候可以直接從事先保存的Savepoints恢復原有的計算狀態,使得任務繼續按照停機之前的狀態運行。
- Flink將窗口劃分為基于Time、Count、Session,以及Data-driven等類型的窗口操作,窗口可以用靈活的觸發條件定制化來達到對復雜流傳輸模式的支持,用戶可以定義不同的窗口觸發機制來滿足不同的需求。
應用場景
在實際生產的過程中,大量數據在不斷地產生,例如金融交易數據、互聯網訂單數據、GPS定位數據、傳感器信號、移動終端產生的數據、通信信號數據等,以及我們熟悉的網絡流量監控、服務器產生的日志數據,這些數據最大的共同點就是實時從不同的數據源中產生,然后再傳輸到下游的分析系統。
針對這些數據類型主要包括以下場景,Flink對這些場景都有非常好的支持。
- 利用Flink流計算幫助用戶構建更加實時的智能推薦系統,對用戶行為指標進行實時計算,對模型進行實時更新,對用戶指標進行實時預測,并將預測的信息推送給Web/App端,幫助用戶獲取想要的商品信息,另一方面也幫助企業提高銷售額,創造更大的商業價值。
- 例如工業領域的復雜事件處理,這些業務類型的數據量非常大,且對數據的時效性要求較高。我們可以使用Flink提供的CEP(復雜事件處理)進行事件模式的抽取,同時應用Flink的SQL進行事件數據的轉換,在流式系統中構建實時規則引擎。
- 在金融領域的業務中,常常出現各種類型的欺詐行為。運用Flink流式計算技術能夠在毫秒內就完成對欺詐判斷行為指標的計算,然后實時對交易流水進行規則判斷或者模型預測,這樣一旦檢測出交易中存在欺詐嫌疑,則直接對交易進行實時攔截,避免因為處理不及時而導致的經濟損失
- 結合離線數倉,通過利用流計算等諸多優勢和SQL靈活的加工能力,對流式數據進行實時清洗、歸并、結構化處理,為離線數倉進行補充和優化。另一方面結合實時數據ETL處理能力,利用有狀態流式計算技術,可以盡可能降低企業由于在離線數據計算過程中調度邏輯的復雜度,高效快速地處理企業需要的統計結果,幫助企業更好的應用實時數據所分析出來的結果。
- 實時計算各類數據指標,并利用實時結果及時調整在線系統相關策略,在各類投放、無線智能推送領域有大量的應用。流式計算技術將數據分析場景實時化,幫助企業做到實時化分析Web應用或者App應用的各種指標。
- 實時報表分析說近年來很多公司采用的報表統計方案之一,其中最主要的應用便是實時大屏展示。利用流式計算實時得出的結果直接被推送到前段應用,實時顯示出重要的指標變換,最典型的案例就是淘寶的雙十一實時戰報。
Flink VS Spark Streaming
-
數據模型
-
Flink基本數據模型是數據流,以及事件序列。
-
Spark采用RDD模型,Spark Streaming的DStream實際上也就是一組組小批
數據RDD的集合。
-
-
運行時架構
-
Flink是標準的流執行模式,一個事件在一個節點處理完后可以直接發往下一個節
點進行處理。
-
Spark是批計算,將DAG劃分為不同的Stage,一個完成后才可以計算下一個。
-
總結
以上是生活随笔為你收集整理的什么是Flink?Flink能用来做什么?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 分布式系统概念 | 分布式理论:CAP、
- 下一篇: Flink 架构:三层架构体系、运行时组