apache flink 簡介

mcxiaoracle發表於2022-07-16

Apache Flink 功能強大,支援開發和執行多種不同種類的應用程式。它的主要特性包括:批流一體化、精密的狀態管理、事件時間支援以及精確一次的狀態一致性保障等。Flink 不僅可以執行在包括 YARN、 Mesos、Kubernetes 在內的多種資源管理框架上,還支援在裸機叢集上獨立部署。在啟用高可用選項的情況下,它不存在單點失效問題。事實證明,Flink 已經可以擴充套件到數千核心,其狀態可以達到 TB 級別,且仍能保持高吞吐、低延遲的特性。世界各地有很多要求嚴苛的流處理應用都執行在 Flink 之上。


在Spark的世界觀中,一切都是由批次組成的,離線資料是一個大批次,而實時資料是由一個一個無限的小批次組成的。而在Flink的世界觀中,一切都是由流組成的,離線資料是有界限的流,實時資料是一個沒有界限的流,這就是所謂的有界流和無界流。


無界流:有定義流的開始,但沒有定義流的結束。它們會無休止地產生資料。無界流的資料必須持續處理,即資料被攝取後需要立刻處理。我們不能等到所有資料都到達再處理,因為輸入是無限的,在任何時候輸入都不會完成。處理無界資料通常要求以特定順序攝取事件,例如事件發生的順序,以便能夠推斷結果的完整性。

有界流:有定義流的開始,也有定義流的結束。有界流可以在攝取所有資料後再進行計算。有界流所有資料可以被排序,所以並不需要有序攝取。有界流處理通常被稱為批處理。



有狀態的 Flink 程式針對本地狀態訪問進行了最佳化。任務的狀態始終保留在記憶體中,如果狀態大小超過可用記憶體,則會儲存在能高效訪問的磁碟資料結構中。任務透過訪問本地(通常在記憶體中)狀態來進行所有的計算,從而產生非常低的處理延遲。Flink 透過定期和非同步地對本地狀態進行持久化儲存來保證故障場景下精確一次的狀態一致性。





Flink 根據抽象程度分層,提供了三種不同的 API。每一種 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 應用的定義。

Flink是個分散式流處理開源框架:

1: 即使資料來源是無序的或者晚到達的資料,也能保持結果準確性

2:有狀態並且容錯,可以無縫的從失敗中恢復,並可以保持exactly-once

3:大規模分散式

Flink可以確保僅一次語義狀態計算;Flink有狀態意味著,程式可以保持已經處理過的資料;

Flink支援流處理和視窗事件時間語義,Flink支援靈活的基於時間視窗,計數,或會話資料驅動的窗戶;

Flink容錯是輕量級和在同一時間允許系統維持高吞吐率和提供僅一次的一致性保證,Flink從失敗中恢復,零資料丟失;

Flink能夠高吞吐量和低延遲;

Flink儲存點提供版本控制機制,從而能夠更新應用程式或再加工歷史資料沒有丟失並在最小的停機時間。


一:one-to-one 模式:兩個operator用此模式傳遞的時候,會保持資料的分割槽數和資料的排序;

二:Redistributing 模式:這種模式會改變資料的分割槽數;每個一個operator subtask會根據選擇transformation把資料傳送到不同的目標subtasks,比如keyBy()會透過hashcode重新分割槽,broadcast()和rebalance()方法會隨機重新分割槽;






————————————————

原文連結:

https://blog.csdn.net/qq_35423154/article/details/113759891






————————————————

版權宣告:本文為CSDN博主「凌桓丶」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處連結及本宣告。

原文連結:

https://blog.csdn.net/qq_35423154/article/details/113759891








————————————————

原文連結:https://blog.csdn.net/qq_35423154/article/details/113759891


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

相關文章