【Flink】基於 Flink 的流式資料實時去重

papering發表於2024-10-11

State Backends | Apache Flink https://nightlies.apache.org/flink/flink-docs-release-1.20/zh/docs/dev/datastream/fault-tolerance/state_backends/

Flink 提供了多種 state backends,它用於指定狀態的儲存方式和位置。

狀態可以位於 Java 的堆或堆外記憶體。取決於你的 state backend,Flink 也可以自己管理應用程式的狀態。 為了讓應用程式可以維護非常大的狀態,Flink 可以自己管理記憶體(如果有必要可以溢寫到磁碟)。 預設情況下,所有 Flink Job 會使用 Flink 配置檔案 中指定的 state backend。

【Flink】基於 Flink 的流式資料實時去重-騰訊雲開發者社群-騰訊雲 https://cloud.tencent.com/developer/article/1707045

我們不能將狀態僅交由記憶體管理,因為記憶體的容量是有限制的,當狀態資料稍微大一些時,就會出現記憶體不夠的問題。由於 Flink 本身提供了有狀態的計算,並且封裝了一些底層的實現,比如狀態的高效儲存、Checkpoint 和 Savepoint 持久化備份機制、計算資源擴縮容等問題,所以我們只需要呼叫 Flink API,專注於業務邏輯即可。

2.狀態型別

Managed State 和 Raw State

Flink有兩種基本型別的狀態:託管狀態(Managed State)和原生狀態(Raw State)。從名稱中也能讀出兩者的區別:Managed State 是由 Flink 管理的,Flink 幫忙儲存、恢復和最佳化,Raw State 是開發者自己管理的,需要自己序列化。兩者對比如下:

Managed State

Raw State

狀態管理方式

Flink Runtime 託管,自動儲存、自動恢復、自動伸縮

使用者自己管理

狀態資料結構

Flink提供的常用資料結構,如 ListState、MapState 等

位元組陣列:byte[]

使用場景

絕大多數 Flink 運算元

使用者自定義運算元

大部分情況下我們使用 Managed State 便可滿足需求。

相關文章