精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Flink Checkpoint 完整過(guò)程技術(shù)解析(附源碼)

大數(shù)據(jù)
本文的目標(biāo)讀者是希望深入理解 Flink 內(nèi)部機(jī)制的數(shù)據(jù)平臺(tái)工程師、流計(jì)算架構(gòu)師及技術(shù)負(fù)責(zé)人。

在分布式流處理領(lǐng)域,狀態(tài)容錯(cuò)與一致性是保障系統(tǒng)生產(chǎn)可用的核心基石。Apache Flink 作為業(yè)界領(lǐng)先的流計(jì)算框架,其強(qiáng)大的狀態(tài)管理與容錯(cuò)能力主要源于其精巧的檢查點(diǎn)(Checkpoint)機(jī)制。該機(jī)制以異步屏障快照(Asynchronous Barrier Snapshotting)為核心,協(xié)同狀態(tài)后端(State Backend)、存儲(chǔ)抽象(CheckpointStorage)以及分布式協(xié)調(diào)組件,構(gòu)建了一套能夠在各種故障場(chǎng)景下提供可預(yù)期恢復(fù)行為的端到端容錯(cuò)體系。

理解 Flink Checkpoint 的完整過(guò)程,不僅是保障流作業(yè)穩(wěn)定運(yùn)行的前提,也是進(jìn)行性能調(diào)優(yōu)、解決復(fù)雜故障、構(gòu)建高可靠數(shù)據(jù)應(yīng)用的關(guān)鍵。本技術(shù)解析文章旨在整合 Flink Checkpoint 的機(jī)制研究與源碼分析,從設(shè)計(jì)原理、架構(gòu)組成、核心源碼、完整流程、狀態(tài)管理、容錯(cuò)恢復(fù)、性能優(yōu)化等多個(gè)維度,系統(tǒng)性地揭示 Flink Checkpoint 的內(nèi)部工作原理。

本文的目標(biāo)讀者是希望深入理解 Flink 內(nèi)部機(jī)制的數(shù)據(jù)平臺(tái)工程師、流計(jì)算架構(gòu)師及技術(shù)負(fù)責(zé)人。我們將以 Flink 官方文檔為基礎(chǔ),結(jié)合社區(qū)深度實(shí)踐與核心源碼,確保內(nèi)容的權(quán)威性、準(zhǔn)確性和實(shí)踐指導(dǎo)價(jià)值。

一、基礎(chǔ)概念:Checkpoint原理與設(shè)計(jì)思想

Flink 的 Checkpoint 機(jī)制本質(zhì)上是一種分布式快照技術(shù),其核心思想是定期、一致性地捕獲流處理作業(yè)在某一時(shí)刻的全局狀態(tài),并將其持久化到可靠的外部存儲(chǔ)中。這份全局快照不僅包含算子內(nèi)部的狀態(tài)(如窗口聚合結(jié)果、鍵值對(duì)等),還精確記錄了數(shù)據(jù)流在各個(gè)處理環(huán)節(jié)的位置(即數(shù)據(jù)源的讀取偏移量)。當(dāng)作業(yè)遭遇故障(如節(jié)點(diǎn)宕機(jī)、網(wǎng)絡(luò)中斷)時(shí),F(xiàn)link 能夠從最近一次成功的 Checkpoint 中完整恢復(fù)作業(yè)狀態(tài),并從記錄的位置繼續(xù)消費(fèi)數(shù)據(jù),從而實(shí)現(xiàn) Exactly-Once 或 At-Least-Once 的處理語(yǔ)義。

1. 異步屏障快照(Asynchronous Barrier Snapshotting)

Flink 的容錯(cuò)機(jī)制建立在兩大基石之上:可重放的數(shù)據(jù)源(如 Kafka、Pulsar)和異步屏障快照(ABS)。ABS 算法是 Flink 實(shí)現(xiàn)分布式一致性快照的核心,其工作流程如下:

(1) 屏障注入:JobManager 中的 CheckpointCoordinator 周期性地向所有數(shù)據(jù)源(Source)任務(wù)發(fā)送一個(gè)攜帶新 Checkpoint ID 的觸發(fā)消息。

(2) 屏障廣播:Source 任務(wù)接收到消息后,暫停處理新數(shù)據(jù),執(zhí)行本地狀態(tài)快照,并將一個(gè)特殊的**檢查點(diǎn)屏障(Checkpoint Barrier)**注入到其輸出數(shù)據(jù)流中,然后恢復(fù)數(shù)據(jù)處理。這個(gè)屏障就像一個(gè)標(biāo)記,將數(shù)據(jù)流切分為“屬于本次快照”和“屬于下次快照”兩部分。

(3) 屏障對(duì)齊:屏障隨著數(shù)據(jù)流在算子間向下游傳遞。對(duì)于擁有多個(gè)輸入流的算子,它需要等待所有輸入通道的同一 Checkpoint ID 的屏障都到達(dá)后,才執(zhí)行自己的狀態(tài)快照。在此期間,已收到屏障的通道的數(shù)據(jù)會(huì)被緩存起來(lái),這個(gè)過(guò)程稱為“屏障對(duì)齊”。

(4) 狀態(tài)快照與屏障傳遞:算子完成屏障對(duì)齊后,立即執(zhí)行本地狀態(tài)的快照,并向其所有下游廣播收到的屏障。

(5) ACK確認(rèn):當(dāng)一個(gè)算子(通常是 Sink)完成其狀態(tài)快照后,會(huì)向 CheckpointCoordinator 發(fā)送一個(gè)確認(rèn)(ACK)消息,告知其本地快照已完成并持久化。

(6) Checkpoint完成:當(dāng) CheckpointCoordinator 收到所有相關(guān)算子的 ACK 消息后,便將該 Checkpoint 標(biāo)記為“已完成”,并持久化 Checkpoint 的元數(shù)據(jù)。

通過(guò)這種方式,即使在持續(xù)不斷的數(shù)據(jù)流中,F(xiàn)link 也能夠巧妙地在所有分布式算子上捕獲到一個(gè)邏輯上瞬時(shí)且全局一致的狀態(tài)快照。

2. 一致性語(yǔ)義:Exactly-Once vs. At-Least-Once

Flink Checkpoint 支持兩種不同級(jí)別的一致性語(yǔ)義,開發(fā)者可以根據(jù)業(yè)務(wù)需求進(jìn)行取舍:

維度

Exactly-Once(精確一次)

At-Least-Once(至少一次)

屏障對(duì)齊

必須進(jìn)行

。確保所有算子在同一邏輯時(shí)間點(diǎn)上進(jìn)行快照,是實(shí)現(xiàn)精確一次的保障。

可以選擇不對(duì)齊

(Unaligned Checkpoint)。在背壓嚴(yán)重時(shí),算子無(wú)需等待所有屏障到達(dá),可以提前進(jìn)行快照,從而降低延遲。

數(shù)據(jù)處理

故障恢復(fù)后,不會(huì)出現(xiàn)任何數(shù)據(jù)的重復(fù)處理或丟失。

故障恢復(fù)后,可能存在少量數(shù)據(jù)被重復(fù)處理的情況。

性能開銷

屏障對(duì)齊過(guò)程可能引入額外的延遲,尤其是在數(shù)據(jù)傾斜或背壓場(chǎng)景下。

延遲更低,吞吐量更高,因?yàn)樘^(guò)了對(duì)齊等待。

適用場(chǎng)景

對(duì)數(shù)據(jù)準(zhǔn)確性要求極高的場(chǎng)景,如金融交易、核心計(jì)費(fèi)等。

對(duì)延遲和吞吐量要求更高,且下游系統(tǒng)具備冪等性處理能力的場(chǎng)景,如日志分析、監(jiān)控告警等。

二、架構(gòu)分析:系統(tǒng)組件和交互關(guān)系

Flink Checkpoint 的實(shí)現(xiàn)涉及 JobManager 和 TaskManager 上的多個(gè)核心組件,它們之間通過(guò)精心設(shè)計(jì)的交互協(xié)議協(xié)同工作,共同完成分布式快照的生命周期管理。

1. 核心組件職責(zé)

(1) CheckpointCoordinator (位于 JobManager)

  • 觸發(fā)與調(diào)度:作為 Checkpoint 的總指揮,負(fù)責(zé)按預(yù)定策略(周期性或手動(dòng))啟動(dòng) Checkpoint,并為每個(gè) Checkpoint 分配一個(gè)全局唯一的 ID。
  • 消息協(xié)調(diào):向 Source 任務(wù)發(fā)送 TriggerCheckpoint 消息,并接收來(lái)自所有任務(wù)的 AcknowledgeCheckpoint (ACK) 或 DeclineCheckpoint 消息。
  • 狀態(tài)管理:維護(hù) PendingCheckpoint 和 CompletedCheckpoint 的狀態(tài)機(jī)。當(dāng)收到所有必要的 ACK 后,將一個(gè)待定的 Checkpoint 轉(zhuǎn)化為已完成狀態(tài)。
  • 元數(shù)據(jù)持久化:將已完成的 Checkpoint 元數(shù)據(jù)(包含所有任務(wù)的狀態(tài)句柄和外部路徑)寫入到可靠的持久化存儲(chǔ)中。
  • 恢復(fù)決策:當(dāng)作業(yè)需要恢復(fù)時(shí),負(fù)責(zé)從持久化存儲(chǔ)中選擇最新的或指定的 CompletedCheckpoint 來(lái)啟動(dòng)恢復(fù)流程。

(2) CheckpointStorage (可插拔的存儲(chǔ)后端)

職責(zé):定義了 Checkpoint 數(shù)據(jù)和元數(shù)據(jù)如何被持久化。自 Flink 1.13 版本起,CheckpointStorage 的職責(zé)被進(jìn)一步明確為只負(fù)責(zé)遠(yuǎn)程持久化。

實(shí)現(xiàn):

  • JobManagerCheckpointStorage: 將 Checkpoint 數(shù)據(jù)存儲(chǔ)在 JobManager 的堆內(nèi)存中,主要用于調(diào)試和測(cè)試,不適用于生產(chǎn)環(huán)境。
  • FileSystemCheckpointStorage: 將 Checkpoint 數(shù)據(jù)寫入外部文件系統(tǒng),如 HDFS, S3, GCS 等,是生產(chǎn)環(huán)境的標(biāo)準(zhǔn)選擇。

(3) StateBackend (可插拔的狀態(tài)后端)

職責(zé):定義了算子在運(yùn)行時(shí)如何存儲(chǔ)和管理其本地狀態(tài)數(shù)據(jù),以及在執(zhí)行 Checkpoint 時(shí)如何創(chuàng)建狀態(tài)的快照。

實(shí)現(xiàn):

  • HashMapStateBackend: 狀態(tài)數(shù)據(jù)作為 Java 對(duì)象存儲(chǔ)在 TaskManager 的堆內(nèi)存上。讀寫速度快,但受限于內(nèi)存容量,適用于狀態(tài)較小的場(chǎng)景。
  • EmbeddedRocksDBStateBackend: 狀態(tài)數(shù)據(jù)被序列化后存儲(chǔ)在 TaskManager 本地磁盤上的 RocksDB 實(shí)例中。能夠支持遠(yuǎn)超內(nèi)存容量的巨大狀態(tài),并支持增量 Checkpoint,是大規(guī)模狀態(tài)應(yīng)用的首選。

2. 組件交互流程

(1) 觸發(fā):CheckpointCoordinator 通過(guò)其內(nèi)部的 ScheduledTrigger 線程,定期調(diào)用 triggerCheckpoint() 方法。

(2) 創(chuàng)建與分發(fā):CheckpointCoordinator 創(chuàng)建一個(gè) PendingCheckpoint 對(duì)象,并通過(guò) RPC 向所有 Source 任務(wù)發(fā)送 TriggerCheckpoint 消息。

(3) 快照與屏障傳遞:

  • Source 任務(wù)接收到消息后,執(zhí)行本地快照,并將 Checkpoint Barrier 注入數(shù)據(jù)流。
  • 下游算子接收到 Barrier,在完成屏障對(duì)齊后,調(diào)用其 StateBackend 執(zhí)行本地狀態(tài)快照。StateBackend 將狀態(tài)數(shù)據(jù)寫入由 CheckpointStorage 提供的輸出流中,并返回一個(gè) StateHandle(指向持久化數(shù)據(jù)的指針)。

(4) ACK 上報(bào):算子完成本地快照后,向 CheckpointCoordinator 發(fā)送 AcknowledgeCheckpoint 消息,其中包含了其生成的 StateHandle 和其他快照元數(shù)據(jù)。

(5)  完成與持久化:CheckpointCoordinator 在收集到所有任務(wù)的 ACK 后,將 PendingCheckpoint 轉(zhuǎn)換為 CompletedCheckpoint,并調(diào)用 CompletedCheckpointStore 將這個(gè)完整的 Checkpoint 元數(shù)據(jù)持久化。

(6) 清理:CheckpointCoordinator 根據(jù)配置的保留策略,清理舊的、不再需要的 CompletedCheckpoint 及其關(guān)聯(lián)的外部存儲(chǔ)文件。

三、核心源碼解析:關(guān)鍵類和方法的源碼分析

為了深入理解 Checkpoint 機(jī)制的實(shí)現(xiàn)細(xì)節(jié),我們需要剖析其背后的核心類與關(guān)鍵方法。源碼的演進(jìn)體現(xiàn)了 Flink 團(tuán)隊(duì)對(duì)性能、易用性和擴(kuò)展性的持續(xù)追求。

1. CheckpointCoordinator:分布式快照的大腦

CheckpointCoordinator 位于 org.apache.flink.runtime.checkpoint 包下,是 JobManager 端 Checkpoint 機(jī)制的絕對(duì)核心。它 orchestrates 整個(gè)分布式快照的生命周期。

關(guān)鍵方法剖析:

(1) triggerCheckpoint(boolean isPeriodic): 這是啟動(dòng) Checkpoint 的入口。在觸發(fā)前,它會(huì)進(jìn)行一系列前置條件檢查,確保當(dāng)前可以啟動(dòng)一個(gè)新的 Checkpoint。

// 源碼簡(jiǎn)化邏輯
public CompletableFuture<CompletedCheckpoint> triggerCheckpoint(boolean isPeriodic) {
    // 1. 前置檢查:并發(fā)數(shù)、最小間隔、是否有正在運(yùn)行的任務(wù)等
    if (isTriggering || (periodicTrigger != null && periodicTrigger.isSuspended()) ||
        (successfulCheckpoints.size() >= maxConcurrentCheckpoints) || 
        (System.currentTimeMillis() - lastCheckpointCompletion < minPauseBetweenCheckpoints)) {
        return FutureUtils.completedExceptionally(new CheckpointException(...));
    }

    // 2. 創(chuàng)建 PendingCheckpoint
    final PendingCheckpoint checkpoint = new PendingCheckpoint(...);

    // 3. 向 Source 任務(wù)發(fā)送觸發(fā)消息
    for (ExecutionVertex task : tasksToTrigger) {
        task.triggerCheckpoint(checkpoint.getCheckpointId(), checkpoint.getTimestamp(), checkpointOptions);
    }

    // 4. 設(shè)置超時(shí)
    scheduledTimeout = scheduler.schedule(..., checkpointTimeout, TimeUnit.MILLISECONDS);

    return checkpoint.getCompletionFuture();
}

(2) receiveAcknowledgeMessage(AcknowledgeCheckpoint message): 當(dāng) TaskManager 上的任務(wù)完成本地快照后,會(huì)調(diào)用此方法。CheckpointCoordinator 在這里聚合 ACK,并在所有任務(wù)都確認(rèn)后,完成整個(gè) Checkpoint。

// 源碼簡(jiǎn)化邏輯
public boolean receiveAcknowledgeMessage(AcknowledgeCheckpoint message, String taskManagerLocation) {
    PendingCheckpoint pending = pendingCheckpoints.get(message.getCheckpointId());

    if (pending != null) {
        // 標(biāo)記該任務(wù)已完成 ACK
        pending.acknowledgeTask(message.getJobvertexId(), ...);

        // 檢查是否所有任務(wù)都已 ACK
        if (pending.areAllTasksAcked()) {
            // 完成 Checkpoint
            completePendingCheckpoint(pending);
        }
        return true;
    }
    return false; // Checkpoint 已過(guò)期或中止
}

(3) restoreLatestCheckpointedStateToAll(...): 當(dāng)作業(yè)從失敗中恢復(fù)時(shí),此方法是恢復(fù)流程的起點(diǎn)。它會(huì)從 CompletedCheckpointStore 中找到最新的可用 Checkpoint,并向所有任務(wù)分發(fā)其狀態(tài)。

2. StateBackend 與 CheckpointStorage 的職責(zé)分工(Flink 1.13+)

Flink 1.13 版本對(duì)狀態(tài)管理架構(gòu)進(jìn)行了一次重要的重構(gòu),將 StateBackend 和 CheckpointStorage 的職責(zé)進(jìn)行了清晰的拆分,極大地提升了系統(tǒng)的模塊化和可理解性。

  • StateBackend (org.apache.flink.runtime.state.StateBackend): 關(guān)注本地狀態(tài)。它的核心職責(zé)是在 TaskManager 上創(chuàng)建和管理算子的狀態(tài)(Keyed State 和 Operator State)。它決定了狀態(tài)在運(yùn)行時(shí)是以何種數(shù)據(jù)結(jié)構(gòu)存在(如堆內(nèi)存的 HashMap 或本地磁盤的 RocksDB)。
  • CheckpointStorage (org.apache.flink.runtime.state.CheckpointStorage): 關(guān)注遠(yuǎn)程持久化。它的核心職責(zé)是處理 Checkpoint 數(shù)據(jù)和元數(shù)據(jù)的持久化存儲(chǔ)。它決定了快照數(shù)據(jù)最終被寫入何處(如 HDFS 或 S3),并負(fù)責(zé)生成可用于恢復(fù)的 StateHandle。

這種解耦意味著,開發(fā)者可以自由組合不同的狀態(tài)后端和存儲(chǔ)后端,例如:

  • 使用 HashMapStateBackend 以獲得極低的讀寫延遲,同時(shí)使用 FileSystemCheckpointStorage 將快照持久化到 HDFS。
  • 使用 EmbeddedRocksDBStateBackend 來(lái)管理超大規(guī)模狀態(tài),同時(shí)使用 FileSystemCheckpointStorage 將增量快照持久化到 S3。

3. Barrier 對(duì)齊的緩存機(jī)制源碼解析

當(dāng)使用 EXACTLY_ONCE 語(yǔ)義時(shí),多輸入的算子需要進(jìn)行 Barrier 對(duì)齊。這個(gè)過(guò)程中,已到達(dá) Barrier 的輸入通道的數(shù)據(jù)必須被緩存,直到其他通道的 Barrier 也到達(dá)。這個(gè)緩存機(jī)制的實(shí)現(xiàn)對(duì)性能至關(guān)重要。

根據(jù)社區(qū)的源碼分析(墨天輪),Barrier 對(duì)齊過(guò)程中的緩存管理主要由 BufferStorage 接口及其實(shí)現(xiàn) CachedBufferStorage 負(fù)責(zé):

  • BufferStorage: 定義了三階段的數(shù)據(jù)管理接口:add() 用于添加緩存數(shù)據(jù),rollOver() 用于將緩存數(shù)據(jù)轉(zhuǎn)換為可消費(fèi)的序列,pollNext() 用于消費(fèi)數(shù)據(jù)。
  • CachedBufferStorage: 使用一個(gè) ArrayDeque<BufferOrEvent> 作為內(nèi)部緩存隊(duì)列。當(dāng) rollOver() 被調(diào)用時(shí),它會(huì)創(chuàng)建一個(gè) BufferOrEventSequence 對(duì)象,該對(duì)象封裝了當(dāng)前的緩存隊(duì)列以供下游消費(fèi)。
  • 內(nèi)存管理:底層數(shù)據(jù)由 MemorySegment 封裝,占用的是 Flink 的網(wǎng)絡(luò)緩沖(NetworkBuffer)內(nèi)存,這確保了緩存數(shù)據(jù)與網(wǎng)絡(luò)數(shù)據(jù)使用統(tǒng)一的內(nèi)存管理體系,避免了額外的內(nèi)存拷貝和管理開銷。

四、完整流程:從觸發(fā)到完成的詳細(xì)過(guò)程

一個(gè)完整的 Checkpoint 生命周期可以分解為以下幾個(gè)關(guān)鍵階段,每個(gè)階段都涉及特定的組件和動(dòng)作。

階段

關(guān)鍵動(dòng)作

主要參與者

典型耗時(shí)因素

1. 觸發(fā) (Trigger)

CheckpointCoordinator

 進(jìn)行前置檢查(并發(fā)、間隔等),創(chuàng)建 PendingCheckpoint,并向 Source 發(fā)送觸發(fā)消息。

JobManager (CheckpointCoordinator)

RPC 延遲、JobManager 負(fù)載。

2. 對(duì)齊 (Align)

多輸入算子等待所有上游 Barrier 到達(dá)。在此期間,已到達(dá) Barrier 的通道數(shù)據(jù)被緩存。

TaskManager (算子任務(wù))

背壓程度

、數(shù)據(jù)傾斜、網(wǎng)絡(luò)延遲。這是 Checkpoint 耗時(shí)的主要瓶頸之一。

3. 快照 (Snapshot)

算子調(diào)用 StateBackend 執(zhí)行同步或異步的本地狀態(tài)快照。數(shù)據(jù)被序列化并寫入 CheckpointStorage 提供的流。

TaskManager, StateBackend

狀態(tài)大小

、序列化開銷、本地 I/O 性能(尤其是 RocksDB)。

4. 持久化 (Persist)

快照數(shù)據(jù)被異步寫入遠(yuǎn)程持久化存儲(chǔ)(如 HDFS, S3)。

TaskManager, CheckpointStorage, 遠(yuǎn)程文件系統(tǒng)

網(wǎng)絡(luò)帶寬

、遠(yuǎn)程存儲(chǔ)的寫入吞吐量和延遲。

5. 確認(rèn) (Acknowledge)

任務(wù)完成本地快照和持久化后,向 CheckpointCoordinator 發(fā)送 ACK 消息,包含 StateHandle。

TaskManager, JobManager

RPC 延遲。

6. 完成 (Complete)

CheckpointCoordinator

 收到所有任務(wù)的 ACK,將 PendingCheckpoint 標(biāo)記為 CompletedCheckpoint,并持久化元數(shù)據(jù)。

JobManager (CheckpointCoordinator), CompletedCheckpointStore

元數(shù)據(jù)大小、持久化存儲(chǔ)的元數(shù)據(jù)操作性能。

7. 清理 (Cleanup)

CheckpointCoordinator

 根據(jù)保留策略(如保留最近 N 個(gè)),刪除舊的 CompletedCheckpoint 及其在外部存儲(chǔ)上的物理文件。

JobManager, 遠(yuǎn)程文件系統(tǒng)

文件系統(tǒng) delete 操作的性能,尤其是在有大量小文件時(shí)。

五、狀態(tài)管理:不同State Backend的實(shí)現(xiàn)機(jī)制

StateBackend 的選擇直接決定了狀態(tài)的運(yùn)行時(shí)性能和 Checkpoint 的行為模式。

1. HashMapStateBackend

運(yùn)行時(shí)存儲(chǔ):所有狀態(tài)數(shù)據(jù)(Keyed State 和 Operator State)都以 Java 對(duì)象的形式直接存儲(chǔ)在 TaskManager 的 JVM 堆內(nèi)存中。訪問(wèn)狀態(tài)就像訪問(wèn)普通的 Java HashMap 一樣,無(wú)需序列化/反序列化,因此讀寫性能極高。

Checkpoint 過(guò)程:執(zhí)行 Checkpoint 時(shí),HashMapStateBackend 會(huì)遍歷內(nèi)存中的所有狀態(tài)數(shù)據(jù),使用配置的序列化器將其序列化,然后寫入到 CheckpointStorage 提供的輸出流中。這是一個(gè)全量快照的過(guò)程,每次 Checkpoint 都需要寫入完整的狀態(tài)數(shù)據(jù)。

適用場(chǎng)景:狀態(tài)規(guī)模較?。ㄍǔT?GB 級(jí)別以下),且對(duì)處理延遲要求極為苛刻的場(chǎng)景。

缺點(diǎn):狀態(tài)大小受限于 JVM 堆內(nèi)存,過(guò)大的狀態(tài)會(huì)導(dǎo)致 GC 壓力劇增甚至 OOM。不支持增量 Checkpoint。

2. EmbeddedRocksDBStateBackend

運(yùn)行時(shí)存儲(chǔ):狀態(tài)數(shù)據(jù)被序列化后存儲(chǔ)在 TaskManager 本地磁盤上的一個(gè)嵌入式 RocksDB 數(shù)據(jù)庫(kù)實(shí)例中。每次讀寫狀態(tài)都需要經(jīng)過(guò)序列化/反序列化,并在內(nèi)存(RocksDB的 block cache)和磁盤之間進(jìn)行數(shù)據(jù)交換。

Checkpoint 過(guò)程:這是 EmbeddedRocksDBStateBackend 的核心優(yōu)勢(shì)。它利用 RocksDB 內(nèi)部的持久化和快照機(jī)制,可以實(shí)現(xiàn)高效的增量 Checkpoint。在執(zhí)行 Checkpoint 時(shí),F(xiàn)link 只需將自上次 Checkpoint 以來(lái) RocksDB 中新增或變更的 SST 文件(Sorted String Tables)持久化到遠(yuǎn)程存儲(chǔ)。這使得即使在狀態(tài)非常巨大的情況下(TB 級(jí)別),Checkpoint 的耗時(shí)和 I/O 開銷也能保持在一個(gè)較低且穩(wěn)定的水平。

適用場(chǎng)景:狀態(tài)規(guī)模巨大、需要長(zhǎng)期保存歷史狀態(tài)(如長(zhǎng)窗口計(jì)算)、或希望利用增量 Checkpoint 降低系統(tǒng)抖動(dòng)的場(chǎng)景。

缺點(diǎn):讀寫狀態(tài)存在序列化開銷和潛在的磁盤 I/O 延遲,相比 HashMapStateBackend 性能較低。

六、容錯(cuò)機(jī)制:恢復(fù)流程和故障處理

當(dāng)作業(yè)失敗時(shí),F(xiàn)link 的高可用(HA)服務(wù)會(huì)重新啟動(dòng) JobManager。新的 JobManager 從 Zookeeper 或其他高可用存儲(chǔ)中恢復(fù)作業(yè)的元數(shù)據(jù),并啟動(dòng)恢復(fù)流程。

(1) 選擇恢復(fù)點(diǎn):CheckpointCoordinator 從 CompletedCheckpointStore 中加載所有已完成的 Checkpoint 元數(shù)據(jù),并選擇最新或用戶指定的一個(gè) CompletedCheckpoint 作為恢復(fù)點(diǎn)。

(2) 分發(fā)狀態(tài)句柄:CheckpointCoordinator 將 CompletedCheckpoint 元數(shù)據(jù)中記錄的每個(gè)任務(wù)的 StateHandle 分發(fā)給新啟動(dòng)的 TaskManager 上的對(duì)應(yīng)任務(wù)。

(3) 狀態(tài)恢復(fù):

  • 每個(gè)任務(wù)從收到的 StateHandle 中解析出其狀態(tài)數(shù)據(jù)的存儲(chǔ)路徑。
  • 任務(wù)通過(guò) CheckpointStorage 從遠(yuǎn)程存儲(chǔ)讀取其狀態(tài)數(shù)據(jù)。
  • StateBackend 負(fù)責(zé)將讀取到的數(shù)據(jù)反序列化,并用其來(lái)重建算子的本地狀態(tài)(填充內(nèi)存中的 HashMap 或恢復(fù)本地 RocksDB 實(shí)例)。

(4) 數(shù)據(jù)源重置:Source 任務(wù)會(huì)根據(jù) Checkpoint 中記錄的偏移量,重置其在外部數(shù)據(jù)源(如 Kafka)中的讀取位置。

(5) 作業(yè)重啟:所有任務(wù)完成狀態(tài)恢復(fù)后,作業(yè)從恢復(fù)的狀態(tài)和重置的數(shù)據(jù)源位置開始繼續(xù)處理數(shù)據(jù),從而保證了端到端的一致性。

(6) 故障處理:

Checkpoint 超時(shí):如果在 execution.checkpointing.timeout 定義的時(shí)間內(nèi),CheckpointCoordinator 未能收到所有任務(wù)的 ACK,該 Checkpoint 將被視為失敗并被中止。這通常是由于嚴(yán)重的背壓或網(wǎng)絡(luò)問(wèn)題導(dǎo)致。

Checkpoint 失?。喝蝿?wù)在執(zhí)行本地快照或持久化過(guò)程中可能遇到錯(cuò)誤(如 I/O 異常)。任務(wù)會(huì)向 CheckpointCoordinator 發(fā)送 DeclineCheckpoint 消息。Coordinator 收到后會(huì)立即中止該 Checkpoint。

容忍失敗次數(shù):可以通過(guò) execution.checkpointing.tolerable-failed-checkpoints 配置作業(yè)能夠容忍的連續(xù) Checkpoint 失敗次數(shù)。超過(guò)這個(gè)閾值,作業(yè)將會(huì)失敗。

七、性能優(yōu)化:最佳實(shí)踐和調(diào)優(yōu)建議

Checkpoint 的性能直接影響作業(yè)的穩(wěn)定性和端到端延遲。以下是一些關(guān)鍵的優(yōu)化方向:

優(yōu)化方向

關(guān)鍵參數(shù)/策略

調(diào)優(yōu)建議

平衡 RPO 與系統(tǒng)開銷

execution.checkpointing.interval

核心權(quán)衡

。減小間隔可以獲得更近的恢復(fù)點(diǎn)(RPO),但會(huì)增加 Checkpoint 的頻率和系統(tǒng)開銷。應(yīng)根據(jù)狀態(tài)大小和業(yè)務(wù)對(duì)數(shù)據(jù)丟失的容忍度來(lái)設(shè)定。


execution.checkpointing.min-pause-between-checkpoints

設(shè)置兩次 Checkpoint 之間的最小停頓時(shí)間。可以有效防止在 Checkpoint 完成后立即啟動(dòng)下一次,為系統(tǒng)留出處理正常數(shù)據(jù)的“喘息”時(shí)間,降低抖動(dòng)。建議設(shè)置為 Checkpoint 間隔的 50%-80%。

處理背壓場(chǎng)景

execution.checkpointing.unaligned

當(dāng)系統(tǒng)長(zhǎng)期處于背壓狀態(tài)時(shí),啟用Unaligned Checkpoint。這可以繞過(guò)漫長(zhǎng)的 Barrier 對(duì)齊等待,顯著降低 Checkpoint 超時(shí)失敗的概率。但前提是 Sink 必須是冪等的。

大狀態(tài)調(diào)優(yōu)

state.backend: rocksdb

state.backend.incremental: true

必須開啟

。對(duì)于 TB 級(jí)狀態(tài),增量 Checkpoint 是唯一可行的方案,它能將 Checkpoint 的開銷從與總狀態(tài)大小相關(guān),轉(zhuǎn)變?yōu)榕c狀態(tài)變化量相關(guān)。

存儲(chǔ)與網(wǎng)絡(luò)

文件系統(tǒng)選擇與配置 (S3/HDFS)

使用高性能的持久化存儲(chǔ)。對(duì)于對(duì)象存儲(chǔ)(如 S3),確保 Flink 使用了支持多部分上傳(multi-part upload)的插件,并合理配置 s3.upload.max-concurrent-uploads 等參數(shù)以提升上傳帶寬。


taskmanager.network.memory.fraction

適當(dāng)增加網(wǎng)絡(luò)內(nèi)存的比例,可以為 Barrier 對(duì)齊時(shí)的數(shù)據(jù)緩存提供更多空間,緩解背壓。

超時(shí)與并發(fā)

execution.checkpointing.timeout

應(yīng)設(shè)置為一個(gè)大于正常 Checkpoint 完成時(shí)間的值,但又不能過(guò)大,以免在真正出現(xiàn)問(wèn)題時(shí)延遲發(fā)現(xiàn)。建議設(shè)置為平均完成時(shí)間的 3-5 倍。


execution.checkpointing.max-concurrent-checkpoints

絕大多數(shù)情況下應(yīng)保持為 1。允許多個(gè) Checkpoint 并發(fā)執(zhí)行會(huì)極大地增加系統(tǒng)資源的競(jìng)爭(zhēng)和復(fù)雜性,通常只會(huì)導(dǎo)致性能下降。

八、總結(jié):關(guān)鍵要點(diǎn)和實(shí)踐建議

Apache Flink 的 Checkpoint 機(jī)制是其提供強(qiáng)大容錯(cuò)能力和一致性語(yǔ)義的基石。通過(guò)本文從原理、架構(gòu)、源碼到實(shí)踐的完整解析,我們可以得出以下核心結(jié)論和建議:

  • 機(jī)制核心:Checkpoint 的本質(zhì)是基于異步屏障快照的分布式一致性快照,它捕獲了作業(yè)的全局狀態(tài)和數(shù)據(jù)流位置,是實(shí)現(xiàn) Exactly-Once 和 At-Least-Once 的基礎(chǔ)。
  • 架構(gòu)解耦:自 Flink 1.13 起,StateBackend(負(fù)責(zé)運(yùn)行時(shí)本地狀態(tài))和 CheckpointStorage(負(fù)責(zé)遠(yuǎn)程持久化)的清晰解耦,是理解現(xiàn)代 Flink 狀態(tài)管理架構(gòu)的關(guān)鍵。這一設(shè)計(jì)使得狀態(tài)管理更具模塊化和靈活性。
  • 后端選型:HashMapStateBackend 適用于低延遲、小狀態(tài)的場(chǎng)景;而 EmbeddedRocksDBStateBackend 配合增量 Checkpoint,是處理大規(guī)模狀態(tài)、追求穩(wěn)定性的不二之選。
  • 性能關(guān)鍵:Checkpoint 的性能瓶頸通常出現(xiàn)在屏障對(duì)齊(受背壓影響)和狀態(tài)持久化(受狀態(tài)大小和網(wǎng)絡(luò)帶寬影響)兩個(gè)階段。針對(duì)性地使用Unaligned Checkpoint和增量 Checkpoint是應(yīng)對(duì)這兩大瓶頸的有力武器。
  • 實(shí)踐建議:在生產(chǎn)環(huán)境中,強(qiáng)烈建議使用 EmbeddedRocksDBStateBackend + FileSystemCheckpointStorage + 增量 Checkpoint 的組合。同時(shí),精細(xì)化調(diào)整 Checkpoint 間隔、最小暫停時(shí)間、超時(shí)等參數(shù),并結(jié)合監(jiān)控指標(biāo),是保障作業(yè)長(zhǎng)期穩(wěn)定運(yùn)行的必要運(yùn)維手段。

通過(guò)對(duì) Flink Checkpoint 機(jī)制的深度理解,團(tuán)隊(duì)不僅能更自信地構(gòu)建和運(yùn)維關(guān)鍵的實(shí)時(shí)數(shù)據(jù)應(yīng)用,還能在面對(duì)復(fù)雜問(wèn)題時(shí),具備從第一性原理出發(fā)進(jìn)行分析和解決的能力。

責(zé)任編輯:趙寧寧 來(lái)源: 大數(shù)據(jù)技能圈
相關(guān)推薦

2011-03-02 18:23:55

安裝Proftpd

2025-05-26 09:05:00

2023-09-02 21:50:21

2025-03-12 00:44:00

2025-08-27 10:00:00

FlinkCheckpoint大數(shù)據(jù)

2022-01-14 07:56:38

Checkpoint機(jī)制Flink

2025-07-08 08:57:29

2025-02-07 12:33:37

TCPURL頁(yè)面

2018-02-02 15:48:47

ChromeDNS解析

2024-09-11 09:25:03

Tomcat組件PREP

2021-12-13 07:57:47

Flink SQL Flink Hive Udf

2025-04-27 08:15:00

FlinkSavepointCheckpoint

2021-02-26 10:46:11

接口測(cè)試DiffUnix系統(tǒng)

2018-05-13 16:00:22

主播APP視頻

2018-01-19 14:27:17

人工智能機(jī)器人智能聊天

2022-09-08 09:39:03

PythonOCR代碼

2015-06-09 13:31:29

Hadoop RPC遠(yuǎn)源碼解析

2021-12-05 08:28:39

Flink SQLbatch lookuSQL

2025-09-10 10:06:19

2021-06-30 18:16:38

MySQLWal策略
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

黑人另类av| 午夜精品久久17c| 中文字幕第三区| 国产成人精品一区二三区| 亚洲小说图片视频| 亚洲成a人在线观看| 九色91在线视频| 91久久精品国产91性色69| 亚洲国产免费看| 中文字幕精品在线视频| 欧美日韩第二页| 国产激情小视频在线| av毛片久久久久**hd| 国产欧美亚洲精品| 欧美h在线观看| 午夜精品久久99蜜桃的功能介绍| 亚洲系列中文字幕| 无码国产精品一区二区免费式直播| 好操啊在线观看免费视频| 成人av网站在线观看免费| 国产在线一区二区三区| 五月天婷婷激情| 欧美视频二区| 久久精品国产免费观看| 爱爱的免费视频| 国产成人福利av| 欧美又粗又大又爽| 亚洲精品无码久久久久久| 怡红院在线播放| 国产精品视频线看| 色综合666| 成年网站免费在线观看| 亚洲 欧美 激情 小说 另类| 性色一区二区三区| 欧美一区二区性放荡片| 男人女人黄一级| 美女高潮在线观看| 亚洲最大成人综合| 91制片厂免费观看| 色综合久久久久综合一本到桃花网| 成人毛片老司机大片| 69174成人网| 国产精品久久久久久无人区| 国产美女一区| 日本aⅴ大伊香蕉精品视频| 久久精品国产亚洲AV无码男同| 偷拍欧美精品| 日韩一二三在线视频播| 五月天免费网站| 日韩伦理视频| 深夜精品寂寞黄网站在线观看| 成年人在线免费看片| 国内黄色精品| 在线视频欧美日韩| 亚洲欧美综合7777色婷婷| 成人精品天堂一区二区三区| 在线不卡国产精品| 日本美女黄色一级片| 天天综合网91| 欧美精品在线看| 国产精品18p| 国产精品嫩草99av在线| 51精品国产黑色丝袜高跟鞋| 中文字幕亚洲精品在线| 午夜在线a亚洲v天堂网2018| 日本中文字幕成人| 最近中文字幕av| 九九国产精品视频| 国产经品一区二区| 青青青草网站免费视频在线观看| 久久精品一级爱片| 91精品在线影院| 国产普通话bbwbbwbbw| 国产精品一二一区| 国产伦理一区二区三区| 欧美视频免费一区二区三区| 国产日韩欧美高清| 中文字幕日韩一区二区三区不卡| 日韩一级免费视频| 97精品国产露脸对白| 日韩欧美视频一区二区三区四区| 亚洲国产精品欧美久久| 99视频有精品| 先锋影音一区二区三区| 2024最新电影在线免费观看| 亚洲成人综合在线| 农村妇女精品一二区| 亚洲青青一区| 日韩av在线看| 亚洲欧美卡通动漫| 亚洲欧洲一级| 国产免费成人av| 日韩中文字幕免费在线观看| 国产日韩亚洲欧美综合| 日本一二三区视频在线| 中文字幕在线直播| 欧美一区二区在线视频| 少妇精品一区二区三区| 婷婷亚洲五月色综合| 9.1国产丝袜在线观看| 中文字幕一区二区三区四区视频 | 国产欧美日韩精品丝袜高跟鞋| 国产成人麻豆精品午夜在线| 久久久国产一区二区三区四区小说 | 中国黄色片一级| 嫩草国产精品入口| 久久伊人精品一区二区三区| 日日骚av一区二区| 国产宾馆实践打屁股91| 日韩免费毛片| 91美女精品| 欧美一区二区三区四区五区| 一区二区三区伦理片| 狠狠入ady亚洲精品经典电影| 国产精品高潮粉嫩av| 色婷婷av一区二区三区之红樱桃| 亚洲男人的天堂在线aⅴ视频 | 国产裸体歌舞团一区二区| 蜜桃导航-精品导航| 欧美xxxbbb| 91精品国产免费| 欧美aaa级片| 久久精品亚洲| 久久久久久一区| 国产高清在线a视频大全| 欧美电影一区二区三区| www.日本高清视频| 视频在线观看91| 久久久久久一区| 国产精品论坛| 337p日本欧洲亚洲大胆色噜噜| 97超碰免费在线观看| 一区中文字幕| 美女精品视频一区| 一级特黄aa大片| 中文字幕欧美三区| 午夜视频在线瓜伦| 精品国产精品国产偷麻豆| 中文字幕亚洲综合久久筱田步美| 天堂网视频在线| 91理论电影在线观看| 国产av人人夜夜澡人人爽麻豆| 日本精品一区二区三区在线观看视频| 自拍偷拍亚洲一区| 亚洲网站在线免费观看| 中文字幕av一区二区三区高| 亚洲精品自拍网| 色999国产精品| 91精品视频专区| 日韩激情美女| 亚洲第一在线视频| 日本免费www| 日韩不卡一区二区| 亚洲国产成人不卡| 亚洲福利影视| 亚洲黄色av女优在线观看| 国产在线拍揄自揄拍| 暴力调教一区二区三区| av7777777| 国精一区二区| 成人黄色网免费| 日本片在线看| 亚洲精品电影在线| 欧美亚洲另类小说| 一色桃子久久精品亚洲| 无套内谢丰满少妇中文字幕| 亚洲国产日韩欧美在线| 粉嫩精品一区二区三区在线观看| 大桥未久在线播放| 亚洲色图美腿丝袜| 日本三级网站在线观看| 久久精品国产精品亚洲精品| 中文字幕一区二区三区四区五区六区| 懂色av色香蕉一区二区蜜桃| 欧美激情久久久久久| 免费在线黄色网址| 欧美高清你懂得| 日本五十路女优| 中文字幕免费在线观看视频一区| 中文字幕 欧美日韩| 狠狠入ady亚洲精品经典电影| 欧美日韩国产高清视频| 中文字幕成人| 欧美性受xxxx白人性爽| 免费成人黄色| 亚洲精品91美女久久久久久久| 免费无码国产精品| 一区二区国产视频| 欧美 日韩 国产 成人 在线观看| 国产一区三区三区| 激情深爱综合网| 99视频精品全国免费| 国产在线一区二区三区播放| 九七影院97影院理论片久久| 亚洲男人天堂视频| 国产av无码专区亚洲av麻豆| 精品久久久久久亚洲国产300| 亚洲精品国产精品国自| av在线不卡免费看| 亚洲妇熟xx妇色黄蜜桃| 亚洲一区二区三区免费在线观看| 一道精品一区二区三区| 成人在线免费| 97热精品视频官网| a天堂中文在线官网在线| 亚洲欧洲第一视频| 囯产精品久久久久久| 欧美视频在线一区| 色综合色综合网色综合| 国产三级精品三级| 尤物网站在线看| 久久精品伊人| 久久亚洲国产成人精品无码区| gogo亚洲高清大胆美女人体| 欧美成人免费播放| 都市激情一区| 日韩精品在线视频美女| 亚洲国产精品久久人人爱潘金莲| 欧美日韩国产天堂| 黑人狂躁日本娇小| 久久亚洲精品小早川怜子| 国产chinesehd精品露脸| 六月丁香婷婷色狠狠久久| aa在线免费观看| 欧美日韩综合| 久久视频免费在线| 欧美国产小视频| 台湾成人av| 久久av资源| 蜜桃视频成人| 日本一道高清一区二区三区| 国产伦精品一区二区三| 中文字幕视频精品一区二区三区| 成人福利网站在线观看| 麻豆精品蜜桃| 国产精品成人免费电影| 吉吉日韩欧美| 久久精彩免费视频| lutube成人福利在线观看| 91精品国产一区二区三区蜜臀| 中文字幕天堂在线| 一区二区三区四区在线免费观看 | 日韩动漫一区| 国产综合色一区二区三区| h视频久久久| 国产欧美综合精品一区二区| 哺乳挤奶一区二区三区免费看| 不卡视频一区二区| 麻豆一区一区三区四区| 精品视频在线观看| 亚洲区小说区| 日本午夜精品一区二区| 精品国产乱码| 中文字幕一区二区三区在线乱码| 亚州av乱码久久精品蜜桃| 日本女人高潮视频| 国内视频精品| 国产一区二区三区精彩视频 | 欧洲精品久久一区二区| 亚洲精品一线二线三线无人区| 日本精品久久久久| 亚洲少妇激情视频| 日韩毛片久久久| 欧美成人性色生活仑片| 变态调教一区二区三区| 97在线视频一区| 日本中文字幕一区二区| 成人午夜黄色影院| 国产精品三p一区二区| 久99久视频| 三区四区不卡| 女人被男人躁得好爽免费视频 | 欧美在线不卡区| 激情中国色综合| 亚洲一区二区三区毛片| 老司机精品视频在线播放| 日本一区二区视频| 亚洲一级毛片| 久久这里只有精品23| 日韩成人精品在线| 国产大片一区二区三区| 91丝袜美腿高跟国产极品老师| 日本性高潮视频| 一区二区三区在线观看国产| 午夜婷婷在线观看| 911精品国产一区二区在线| 色婷婷综合视频| 色婷婷久久一区二区| tube8在线hd| 国产欧美一区二区三区视频| 麻豆成人入口| 精品91一区二区三区| 国产精品毛片| 欧美人与性动交α欧美精品| 久久久久久久综合日本| 欧美激情一区二区视频| 国产精品久久网站| 国产亚洲第一页| 欧美日韩综合在线| 日本黄色一区二区三区| 日韩在线视频一区| 热三久草你在线| 2022国产精品| 日韩精品久久| 又粗又黑又大的吊av| 国产精品一区在线观看你懂的| 国产1区2区在线观看| 亚洲国产精品天堂| 99在线小视频| 色妞在线综合亚洲欧美| 欧洲一区二区三区精品| 国产不卡av在线| 97se亚洲| 青青在线免费视频| 免费的成人av| 国产手机在线观看| 婷婷中文字幕一区三区| 999免费视频| 日韩在线观看网址| 欧洲av一区二区| 欧美亚洲爱爱另类综合| 国产欧美短视频| 美女伦理水蜜桃4| 亚洲女同一区二区| 一级片aaaa| 色噜噜久久综合伊人一本| 国模视频一区| 日韩免费av一区二区三区| 久久午夜精品一区二区| 日韩 中文字幕| 午夜亚洲福利老司机| 午夜久久久久久噜噜噜噜| 久久av.com| 久久久久久爱| 六月婷婷激情网| 激情另类小说区图片区视频区| 亚洲高潮女人毛茸茸| 欧美亚洲国产一区二区三区va| 麻豆国产在线播放| 国产精品久久久久久久久久久久| 国产精品一国产精品| 成人在线观看黄| 国产日产欧美一区| 一级黄色av片| 最新中文字幕亚洲| 免费成人高清在线视频| 自拍偷拍亚洲色图欧美| 黄色小说综合网站| 欧美成人精品欧美一| 日韩美女视频在线| 91福利在线免费| 欧美精品一区二区三区在线看午夜| 亚洲自拍另类| 非洲一级黄色片| 欧美另类videos死尸| 2024短剧网剧在线观看| 国产欧美日韩伦理| 另类av一区二区| 一级在线观看视频| 欧美伦理视频网站| 免费在线看电影| 久久影院理伦片| 美女一区二区三区在线观看| 日韩福利小视频| 精品动漫一区二区三区在线观看| caoprom在线| 欧美日韩综合久久| 国内一区二区在线| 日韩精品成人在线| 亚洲色无码播放| 欧美久久亚洲| 国产高清精品在线观看| 中文字幕av一区二区三区高| 国产裸体永久免费无遮挡| 欧美激情乱人伦一区| 欧美激情在线精品一区二区三区| 中文字幕第38页| 亚洲一区二区偷拍精品| 国产三级视频在线| 亚洲一区二区中文| 性色一区二区三区| 26uuu成人网| 亚洲免费视频在线观看| 亚州欧美在线| 99色精品视频| 亚洲男同性视频| 免费在线黄色影片| www.久久艹| 日韩在线一二三区| 黄色一级片在线| 国产一区二区三区欧美| 亚洲**毛片| 天天干在线影院| 亚洲第一主播视频| 思思99re6国产在线播放| 好看的日韩精品| 国产一区二区精品在线观看| 成人公开免费视频| 久久久噜噜噜久久久| 天天久久综合|