Apache Flink介紹:
Apache Flink 是一個框架和分布式處理引擎,用于在無邊界和有邊界數(shù)據(jù)流上進行有狀態(tài)的計算。Flink 能在所有常見集群環(huán)境中運行,并能以內(nèi)存速度和任意規(guī)模進行計算。
(推薦教程:apache)
接下來,我們來介紹一下 Flink 架構中的重要方面。
處理無界和有界數(shù)據(jù)
任何類型的數(shù)據(jù)都可以形成一種事件流。信用卡交易、傳感器測量、機器日志、網(wǎng)站或移動應用程序上的用戶交互記錄,所有這些數(shù)據(jù)都形成一種流。
數(shù)據(jù)可以被作為 無界 或者 有界 流來處理。
1.無界流 有定義流的開始,但沒有定義流的結束。它們會無休止地產(chǎn)生數(shù)據(jù)。無界流的數(shù)據(jù)必須持續(xù)處理,即數(shù)據(jù)被攝取后需要立刻處理。我們不能等到所有數(shù)據(jù)都到達再處理,因為輸入是無限的,在任何時候輸入都不會完成。處理無界數(shù)據(jù)通常要求以特定順序攝取事件,例如事件發(fā)生的順序,以便能夠推斷結果的完整性。
2.有界流 有定義流的開始,也有定義流的結束。有界流可以在攝取所有數(shù)據(jù)后再進行計算。有界流所有數(shù)據(jù)可以被排序,所以并不需要有序攝取。有界流處理通常被稱為批處理。
Apache Flink 擅長處理無界和有界數(shù)據(jù)集 精確的時間控制和狀態(tài)化使得 Flink 的運行時(runtime)能夠運行任何處理無界流的應用。有界流則由一些專為固定大小數(shù)據(jù)集特殊設計的算法和數(shù)據(jù)結構進行內(nèi)部處理,產(chǎn)生了出色的性能。
通過探索 Flink 之上構建的 用例 來加深理解。
部署應用到任意地方
Apache Flink 是一個分布式系統(tǒng),它需要計算資源來執(zhí)行應用程序。Flink 集成了所有常見的集群資源管理器,例如 Hadoop YARN、 Apache Mesos 和 Kubernetes,但同時也可以作為獨立集群運行。
Flink 被設計為能夠很好地工作在上述每個資源管理器中,這是通過資源管理器特定(resource-manager-specific)的部署模式實現(xiàn)的。Flink 可以采用與當前資源管理器相適應的方式進行交互。
部署 Flink 應用程序時,F(xiàn)link 會根據(jù)應用程序配置的并行性自動標識所需的資源,并從資源管理器請求這些資源。在發(fā)生故障的情況下,F(xiàn)link 通過請求新資源來替換發(fā)生故障的容器。提交或控制應用程序的所有通信都是通過 REST 調(diào)用進行的,這可以簡化 Flink 與各種環(huán)境中的集成。
運行任意規(guī)模應用
Flink 旨在任意規(guī)模上運行有狀態(tài)流式應用。因此,應用程序被并行化為可能數(shù)千個任務,這些任務分布在集群中并發(fā)執(zhí)行。所以應用程序能夠充分利用無盡的 CPU、內(nèi)存、磁盤和網(wǎng)絡 IO。而且 Flink 很容易維護非常大的應用程序狀態(tài)。其異步和增量的檢查點算法對處理延遲產(chǎn)生最小的影響,同時保證精確一次狀態(tài)的一致性。
Flink 用戶報告了其生產(chǎn)環(huán)境中一些令人印象深刻的擴展性數(shù)字
處理每天處理數(shù)萬億的事件,應用維護幾TB大小的狀態(tài), 和應用在數(shù)千個內(nèi)核上運行。
利用內(nèi)存性能
有狀態(tài)的 Flink 程序針對本地狀態(tài)訪問進行了優(yōu)化。任務的狀態(tài)始終保留在內(nèi)存中,如果狀態(tài)大小超過可用內(nèi)存,則會保存在能高效訪問的磁盤數(shù)據(jù)結構中。任務通過訪問本地(通常在內(nèi)存中)狀態(tài)來進行所有的計算,從而產(chǎn)生非常低的處理延遲。Flink 通過定期和異步地對本地狀態(tài)進行持久化存儲來保證故障場景下精確一次的狀態(tài)一致性。