Flink 介紹
Flink
什麼是Flink?
Flink是一個框架和分散式處理引擎,用於對無限制和有限制的資料留進行有狀態的計算。Flink被設計為可在所有常見的叢集環境中執行,以記憶體速度和任何規模執行計算。
處理無界和有界資料
任何型別的資料都是作為事件流產生的。信用卡交易,感測器測量,機器日誌或網站移動應用程式上的使用者互動,所有這些資料均作為流生成。
資料可以作為無界流或有界流處理。
-
無界流有一個起點,但沒有定義的終點。它們不會終止並在生成資料時提供資料,無界流必須被連續處理,即事件在被攝取後必須被及時處理。無法等待所有輸入資料到達,因為輸入時無界的,並且在任何事件都不會完成,處理無邊界資料通常需要以特定順序(例如事件發生的順序)來攝取事件,一遍能夠推斷出結果的完整性。
-
有界流具有定義的開始和結束。可以通過在執行任何計算之前提取所有資料來處理有界流。由於有界資料始終可以排序,因此不需要有序攝取即可處理有界流。繫結流的處理也被稱為批處理。
Flink擅長處理無邊界和有界的資料集。 對事件和狀態的精確控制使Flink的執行時能夠在無限制的流上執行任何型別的應用程式。有界流由專門為固定大小的資料集設計的演算法和資料結構在內部進行處理,從而產生出色的效能。
隨部署應用程式
Flink是一個分散式系統,需要計算資源才能執行應用程式。Flink與所有常見的集權資源管理器(如Hadoop YARN,Mesos和Kubernetes)整合,但也可以設定為作為獨立叢集執行。
Flink旨在與前面列出的每個資源管理器相容。這是通過特定於資源管理器的部署模式實現的,該模式允許Flink慣用方式與每個資源管理器進行互動。
部署Flink應用程式時,Flink會根據應用程式配置的並行性自動識別所需的資源,並向資源管理器請求它們。如果發生故障,Flink會通過請求新資源來替換髮生故障的容器。提交或控制應用程式的所有通訊均通過REST呼叫進行。簡化了Flink在許多環境中的整合。
任意規模執行應用程式
Flink旨在執行任何規模的有狀態流應用程式。將應用程式並行化可能在叢集中分佈並同時執行的數千個任務。因此,應用程式幾乎可以利用無限數量的CPU,主記憶體,磁碟和網路IO。並且,Flink易於維護非常大的應用程式狀態。它的非同步和增量檢查點演算法可確保對處理延遲的影響降至最低,同時保證一次狀態一致性。
生產環境中執行的Flink應用程式的可擴充套件性數字:
- 每天處理數萬億事件的應用程式
- 維護多個TB狀態的應用程式
- 執行在數籤個核心上的應用程式
什麼是有狀態功能?
狀態功能是一種API,可簡化構建分散式狀態應用程式的過程。 它基於具有持久狀態的功能,這些功能可以在強大的一致性保證下進行動態互動。
有狀態功能應用
有狀態功能是存在於代表實體的多個例項中的一小段邏輯/程式碼,類似於參與者。通過訊息呼叫函式,它們是:
有狀態的
函式具有嵌入式的容錯狀態,可以像變數一樣在本地訪問。
虛擬
就像FaaS一樣,函式不會保留資源-不活動的函式不會消耗CPU/記憶體。
什麼是功能即服務(FaaS)?
“功能即服務”(或被稱為FaaS)是一種在無狀態容器中執行的事件驅動型計算執行模式,這些功能將利用服務來管理伺服器端邏輯和狀態。
它允許開發人員以功能的形式來構建,執行和管理這些應用包,無須維護自己的基礎架構。
FaaS是一種實現無伺服器計算的方法,藉此開發人員可以編寫業務邏輯,然後再完全由平臺管理的Liunx容器中執行這些業務邏輯。
該平臺通常位於雲端,但模型正在擴充套件至包含內部部署和混合部署。
無服務會對基礎架構問題進行抽象處理,例如管理或置備伺服器及開發人員的資源分配,並將其提供給平臺(比如紅帽),這樣開發人員就可以專注於編寫程式碼和實現業務價值。
功能是一個執行業務邏輯的軟體。應用可以有許多功能組成。
使用FaaS模型是通過無伺服器架構來構建應用的方法之一,但隨著無伺服器模式的日漸普及,開發人員正在呂兆支援構建五伺服器微服務無狀態容器的解決方案。
以下是FaaS的一些常見例項:
- AWS Lambda
- Google雲功能
- Microsoft Azure 功能(開源)
- OpenFass(開源)
功能即服務是如何工作的?
FaaS為開發人員提供了一種執行應用的抽象方式,可以在無需管理伺服器的情況下響應事件。例如,上傳檔案可以觸發自定義程式碼,從而將檔案轉碼為各種格式。
FaaS基礎架構通常是按需計量的,主要通過事件驅動型模式進行,因此它會隨時待命,但不需要任何伺服器程序在後臺持續執行(這一點於平臺即(Pass)不同)。
現代PaaS解決方案提供了無服務功能(作為通用工作流的補一份),藉此開發人員可以實現應用的部署,從而模糊了PaaS和FaaS之間的界線。
實際上,現代應用將由一下解決方案混合而成:功能、微服務和長期執行的服務。
雲提供商會讓您的功能處於可用狀態並管理資源分配。由於功能是事件驅動而不是資源驅動的,因此它們很容易進行擴充套件。
為了發揮部分優勢,其體系架構會受到一定製約(例如對功能執行施加時間限制),因此需要做到功能的快速啟動和執行。
功能會在毫秒內啟動並處理各個請求。如果您的功能有多個同步請求,系統將建立儘可能多的功能副本來滿足需求。
當需求下降時,應用會自動減少功能副本的數量。動態擴充套件是FaaS的一項優勢,而且頗具有成本效益,因為提供商僅對使用的資源收費,而不對空閒事件收費。
在內部執行時,這種動態特性還可以提高平臺密度,從而允許執行更多工作負載並優化資源消耗。
需要橫向擴充套件的事件驅動服務可作為功能和RESTful應用進行工作。
FaaS非常適合大資料量的交易,經常發生的工作負載,例如報表生成,影象處理或任何計劃任務。常見的FaaS用例包括資料處理、loT服務、移動或Web應用。
可使用FaaS構建完全無伺服器化的應用,也可以打造部分無伺服器,部分傳統微服務元件的應用。
FaaS的優勢
- 提高開發人員的生產率並縮短開發時間
- 不負責服務其管理
- 易於擴充套件,且橫向擴充套件由平臺管理
- 僅在需要時消耗資源或支付付費
- 幾乎可以用任何程式語言來編寫功能
應用程式由具有多種功能的模組組成,可以與一下模組任何互動:
一次語義
狀態和訊息傳遞齊頭並進,提供了一次精確的訊息/狀態語義。
邏輯錄址
函式通過邏輯地址相互傳遞訊息。無需發現服務。
動態和迴圈訊息
訊息傳遞模式無需預先定義為資料流(動態),也不限於DAG(迴圈)。
為無伺服器架構構建的執行時
有狀態功能執行時旨在提供一組類似於無服務特徵的屬性,但適用於有狀態問題。
執行時是建立在Apache弗林克,具有以下設計原則:
邏輯計算/狀態並置
訊息、狀態訪問/更新和功能呼叫被緊密地管理在一起。這確保了開箱即用的高度一致性。
物理計算/狀態分離
功能可以遠端執行,訊息和狀態訪問作為呼叫請求的一部分提供。這樣,可以像無狀態流程一樣管理功能,並支援快速擴充套件,滾動升級和其他常見的操作模式。
語言獨立性
函式呼叫使用簡單的基於HTTP/gRPC的協議,因此可以輕鬆地此各種語言實現函式。
這使得可以在 Kubernetes部署,FaaS平臺或微服務執行功能,同時在功能之間提供一致的狀態和輕量級訊息的傳遞。
主要好處
-
動態訊息傳遞
該API允許您構建和組合可以動態地彼此通訊得函式。與傳統流處理拓撲的非迴圈性質相比,這為您提供了更大的靈活性。
-
一致狀態
功能可以保證持久的本地狀態,並與功能之間的訊息傳遞整合在一起。這為您提供了一次狀態訪問/更新和開箱即用保證高效訊息傳遞的效果。
-
多國語言支援
可以使用任何可以處理HTTP請求或啟動gRPC伺服器的程式語言來實現功能,並且最初支援Python,Go,JavaScript和Rust等語言新增更多JDK。
-
無需資料庫
狀態永續性和容錯能力建立在Flink強大的分散式快照模型的基礎上。這隻需要一個簡單的Blob儲存層(例如S3,GCS,HDFS)即可儲存狀態快照。
-
雲原生
Stateful Function的狀態和組合方法可以與Kubernetes,Knative和AWS Lambda等現代無服務其平臺功能結合使用。
-
無狀態操作
狀態訪問時函式呼叫的一部分,因此有狀態函式應用程式的行為就像無狀態程序,可以以相同的簡單性和優勢進行管理,例如快速可伸縮性,從零擴充套件到零和滾動/零停機升級。