精品欧美一区二区三区在线观看 _久久久久国色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)

欧美激情20| 国产剧情久久久| 亚洲宅男一区| 欧美日韩亚洲综合一区| 欧美三级午夜理伦三级老人| 亚洲AV无码精品国产| 亚洲茄子视频| 中文字幕亚洲情99在线| 欧美熟妇另类久久久久久多毛| 久久免费电影| 久久久精品免费免费| 91精品在线看| 国产精品久久久免费视频| 欧美精品一区二区三区中文字幕| 欧美一区二区三区色| 天堂а√在线中文在线| 理论视频在线| 国产精品影视网| 日韩美女在线观看| 久久久久久久久久网站| 久久不见久久见国语| 69久久夜色精品国产69蝌蚪网| 日韩国产欧美亚洲| av毛片在线播放| 国产亚洲精品福利| 国产高清自拍99| 最近中文字幕免费在线观看| 亚洲毛片视频| 超碰精品一区二区三区乱码| 魔女鞋交玉足榨精调教| 日韩在线观看中文字幕| 欧美写真视频网站| 日韩av黄色网址| 欧美videos另类精品| 中文字幕在线观看不卡| 任我爽在线视频精品一| 黄色a在线观看| 激情五月播播久久久精品| 欧美一级片一区| 久久久精品一区二区涩爱| 日韩一区二区中文| 国产亚洲精品91在线| 午夜剧场免费看| 亚洲一区电影| 制服丝袜亚洲播放| 欧美特级aaa| 日日av拍夜夜添久久免费| 天天操天天干天天综合网| 欧美日韩中文字幕在线播放| 欧美成人二区| 中文字幕中文在线不卡住| 日韩欧美亚洲日产国产| 欧美高清成人| 久久久久久电影| 久久伊人资源站| 青青草视频在线免费观看| www.日本不卡| 精品国产乱码久久久久| 亚洲成人av免费观看| 国产精品伦子伦| 只有精品亚洲| 91精品国产91久久久久久最新毛片| 日本特黄a级片| 在线一区视频观看| 欧美性一区二区| 国产原创精品在线| 成人国产一区二区三区精品麻豆| 色天天综合久久久久综合片| 情侣黄网站免费看| 欧美日韩视频免费观看| 欧美午夜一区二区| 国产精品久久久毛片| 日韩色性视频| 日韩欧美国产电影| xxxwww国产| 在线视频亚洲专区| 日韩在线观看网址| 欧美日韩黄色网| 欧美日韩亚洲一区三区| 91精品国产91久久久| www.com国产| 免费人成精品欧美精品| 成人有码在线视频| 欧美熟妇另类久久久久久不卡| 成人教育av在线| 久久天天狠狠| 日韩精品毛片| 亚洲一区二区在线视频| 国产91在线视频观看| 99只有精品| 日韩精品一区国产麻豆| 黄色国产在线观看| 99久久这里只有精品| 久久久久久久久中文字幕| 国产成人啪精品视频免费网| 阿v天堂2014| 亚洲欧美综合久久久| 久久久久久久亚洲精品| 波多野结衣在线电影| 精品一区在线看| 国产一区二区三区四区hd| 国产高清在线观看| 洋洋av久久久久久久一区| 精品一区二区中文字幕| 亚洲aⅴ网站| 亚洲精品白浆高清久久久久久| 国产美女免费无遮挡| 一区二区三区午夜视频| 青青青国产精品一区二区| 97成人在线观看| 久久午夜国产精品| 欧美大片免费播放| 新片速递亚洲合集欧美合集| 日韩精品一区二区三区在线| 2019男人天堂| 一区二区三区国产在线| 91久久在线播放| 国模吧精品人体gogo| 亚洲一区二区三区小说| www.久久91| 在线亚洲a色| 久久久久久久久久婷婷| 在线观看国产小视频| 99re成人精品视频| 亚洲国产一二三精品无码 | 久久激情av| 久久伊人免费视频| 午夜一区二区三区四区| 99久久精品国产导航| 国产 欧美 日本| 国产色99精品9i| 在线精品国产欧美| 日韩不卡在线播放| av激情亚洲男人天堂| 久久久国内精品| 久久99成人| 久久精品国产欧美激情| 在线观看免费高清视频| 国产喷白浆一区二区三区| www.com毛片| 色综合久久中文| 69久久夜色精品国产69| 欧美一级一区二区三区| 亚洲午夜免费福利视频| 国产麻豆剧传媒精品国产| 中文字幕日韩欧美精品高清在线| 国产精品自拍偷拍视频| av中文在线| 欧美在线观看视频一区二区三区 | 香蕉人人精品| 欧美在线不卡区| 欧美女v视频| 91成人免费网站| 九九九视频在线观看| 日本午夜一区二区| 亚洲精品一区二区三| 欧美xxxx性| 久久躁日日躁aaaaxxxx| 99久久精品免费看国产交换| 亚洲综合在线五月| 五月天丁香社区| 亚洲美女色禁图| 免费av在线一区二区| 亚洲天堂一区二区| 中文字幕国产日韩| 国产精品久久久久久免费免熟 | 欧美天堂一区| 欧美成人精品在线视频| 亚洲黄色a级片| 欧美日韩在线免费观看| 极品蜜桃臀肥臀-x88av| 精品一区二区三区不卡| 亚洲av综合色区| 澳门成人av| 热久久美女精品天天吊色| 成年人在线视频| 欧美一级淫片007| 日本午夜精品理论片a级app发布| 91玉足脚交白嫩脚丫在线播放| 国产a级片免费观看| 欧美电影《轻佻寡妇》| 高清国产在线一区| 黑人巨大亚洲一区二区久| 日韩在线免费视频| 亚洲AV无码精品国产| 91久久国产综合久久| 日韩视频中文字幕在线观看| 99视频有精品| 亚洲xxx在线观看| 一本色道久久综合一区| 亚洲免费不卡| 国产成人一二片| 国产精品视频色| sm捆绑调教国产免费网站在线观看| 亚洲日韩中文字幕| 99精品在线看| 在线观看一区二区视频| 久久免费视频播放| 中文av字幕一区| 国产精品成人99一区无码| 九九**精品视频免费播放| 少妇人妻无码专区视频| 久久久9色精品国产一区二区三区| 国产精品一区视频网站| 欧美男男gaygay1069| 4k岛国日韩精品**专区| 18加网站在线| 在线视频中文亚洲| 三级网站免费观看| 777奇米四色成人影色区| 亚洲欧美偷拍一区| 一区二区三区日韩| 亚洲一级理论片| 91丨porny丨户外露出| 日批视频在线看| 精品一区二区免费| 亚洲五月天综合| 午夜一级久久| 丝袜人妻一区二区三区| 欧美一区综合| 在线视频亚洲自拍| 精品国产一区二区三区四区| 精品国产一区二区三区免费| 天堂久久av| 91性高湖久久久久久久久_久久99| 亚洲a∨精品一区二区三区导航| 午夜精品一区二区三区av| 国产黄色小视频在线| 中文字幕在线观看亚洲| 国产中文在线观看| 日韩成人在线视频网站| 丰满肥臀噗嗤啊x99av| 91精品国产色综合久久| 亚洲最新av网站| 欧美三区在线视频| 丰满熟女人妻一区二区三| 色香蕉成人二区免费| 成人毛片18女人毛片| 香蕉成人啪国产精品视频综合网| 强行糟蹋人妻hd中文| 亚洲精品日韩专区silk| 天堂网avav| 一区二区三区在线播| 男女性高潮免费网站| 亚洲精品一卡二卡| 亚洲av无码一区二区三区在线| 一区二区中文视频| 亚洲熟女少妇一区二区| 日韩一区中文字幕| 一本一本久久a久久| 亚洲欧美综合色| 男人操女人的视频网站| 一区二区久久久久| 国产午夜小视频| 亚洲成年人影院| 五月天婷婷久久| 色综合天天做天天爱| 免费看毛片网站| 欧美无乱码久久久免费午夜一区| 影音先锋黄色网址| 在线成人免费观看| 性生活三级视频| 亚洲国产精品中文| 日本亚洲欧美| 色综合影院在线| 国产成人午夜| 992tv成人免费影院| 欧美天堂视频| 91精品久久久久久久久久久久久 | 久久精品女人天堂| 别急慢慢来1978如如2| 久久精品99国产精品日本| 一卡二卡三卡四卡五卡| 高清久久久久久| 人妻熟女aⅴ一区二区三区汇编| 亚洲国产精华液网站w| 在线观看美女av| 香蕉乱码成人久久天堂爱免费| 亚洲综合久久网| 欧美精品高清视频| 免费观看国产精品| 亚洲欧洲在线播放| yellow91字幕网在线| 97久久久久久| 国产黄色一区| 精品国产一区二区三区免费| 成人无号精品一区二区三区| 欧美日韩dvd| 日韩精品福利网| 免费观看黄网站| 久久久久久免费毛片精品| 成人在线观看小视频| 精品国产乱码久久久久久婷婷| 亚洲av无码乱码国产精品fc2| 日韩视频一区在线观看| 免费看男男www网站入口在线| 久久久国产精品视频| 色老头在线一区二区三区| 成人a级免费视频| 天天久久夜夜| 国产精品12p| 日韩在线a电影| 亚洲美女高潮久久久| 中文字幕免费不卡在线| 日韩精品成人在线| 欧美一级艳片视频免费观看| 国产福利第一视频在线播放| 久久久久久久爱| 爱情电影网av一区二区| 欧美日韩成人一区二区三区 | 国产成人久久777777| 国产精品一色哟哟哟| jizzjizzjizz国产| 欧美性猛交xxxxx免费看| 精品美女www爽爽爽视频| 中文字幕成在线观看| 色综合久久天天综线观看| 九九热线视频只有这里最精品| 国产 高清 精品 在线 a| 欧美xxav| 天堂av在线网站| 91免费版在线| 国产精品suv一区二区69| 91精品国模一区二区三区| 二人午夜免费观看在线视频| 45www国产精品网站| 久久午夜影院| a级免费在线观看| 国产成人精品影视| 一级性生活免费视频| 欧美性欧美巨大黑白大战| 人成在线免费视频| 97超碰色婷婷| 久久香蕉精品香蕉| 久久精品国产sm调教网站演员| 国产福利电影一区二区三区| 成年人免费视频播放| 欧美日韩精品一区二区三区蜜桃| 国产精品一区二区婷婷| 日韩女优在线播放| 一本色道久久综合狠狠躁的番外| 国产极品在线视频| 成人久久视频在线观看| 久草中文在线视频| 精品日韩欧美在线| 午夜小视频在线观看| 99久久精品无码一区二区毛片 | 黄色国产小视频| 国产偷国产偷精品高清尤物| 蜜臀精品一区二区三区| 亚洲欧美成人在线| 台湾佬中文娱乐久久久| 青青成人在线| 捆绑调教一区二区三区| 熟女av一区二区| 日韩一区二区三区在线视频| 深夜国产在线播放| 成人在线观看av| 亚洲精选在线| 欧美日本亚洲| 9999精品视频| av在线免费观看国产| 成人精品在线视频观看| 精品久久免费视频| 日韩国产一区三区| 浪潮色综合久久天堂| 亚洲一区三区| 国产a久久麻豆| www.国产高清| 一区二区三区国产在线观看| 免费一区二区三区四区| 天堂а√在线中文在线| 99国内精品久久| 成人黄色免费网| 欧美成人免费大片| 欧美变态挠脚心| 91制片厂毛片| 自拍偷拍欧美精品| 色婷婷激情五月| 国产精品自产拍高潮在线观看| 亚洲澳门在线| 国产xxxxxxxxx| 欧美色视频一区| 日本一本在线免费福利| 免费国产一区| 国产乱码精品一区二区三区忘忧草| 国产乡下妇女做爰毛片| 亚洲欧美第一页| 日韩免费一级| 黄色国产小视频| 亚洲一区二区影院| 高h视频在线| 国产精品一区二| 麻豆成人免费电影| 国产奶水涨喷在线播放| 中文字幕亚洲色图| 天天躁日日躁成人字幕aⅴ| 亚洲第一成肉网| 91精品福利视频| 超黄网站在线观看|