Flink CDC如何保障數據的一致性?

Flink CDC 通過?Checkpoint 機制冪等性設計?和?事務一致性協議?保障數據同步的一致性。以下是具體實現方式和關鍵配置:


1. Checkpoint 機制(核心保障)

作用:定期保存同步狀態(包括 Binlog 位置和全量快照進度),確保任務失敗后能恢復并避免重復/丟失數據。

關鍵配置

sql

-- 啟用 Checkpoint(SQL 環境)
SET 'execution.checkpointing.interval' = '30s';  -- 每30秒一次
SET 'execution.checkpointing.mode' = 'EXACTLY_ONCE';-- DataStream API 環境
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
env.enableCheckpointing(30000, CheckpointingMode.EXACTLY_ONCE);
env.getCheckpointConfig().setCheckpointStorage("hdfs:///checkpoints/");

原理

  • 全量階段:Checkpoint 記錄已同步的數據分塊和 Binlog 位置。

  • 增量階段:Checkpoint 記錄已處理的 Binlog 事件位點(如?binlog_offset)。


2. 兩階段快照(全量 + 增量無縫切換)

Flink CDC 使用?增量快照算法(Incremental Snapshot)保證全量和增量階段的一致性:

  1. 全量階段

    • 將表數據分塊(Chunk)讀取,每個分塊完成后記錄 Binlog 位置。

    • 若任務中斷,恢復時從最后一個完整分塊繼續。

  2. 增量階段

    • 全量完成后,從記錄的 Binlog 位置開始監聽變更。

    • 通過全局一致性快照確保全量數據與增量變更無遺漏或重復。

配置參數

sql

'scan.incremental.snapshot.enabled' = 'true'  -- 啟用增量快照(默認)
'scan.incremental.snapshot.chunk.size' = '8096'  -- 分塊大小

3. 冪等性寫入(目標端保障)

場景:當 Flink 任務重啟時,可能重復發送數據到目標系統(如 Kafka、數據庫)。

解決方案

  • Kafka:依賴 Kafka 的冪等生產者(enable.idempotence=true)。

  • JDBC 數據庫:使用?UPSERT?代替?INSERT(如 PostgreSQL 的?ON CONFLICT?語法):

    sql

    CREATE TABLE jdbc_sink (id INT PRIMARY KEY,name STRING
    ) WITH ('connector' = 'jdbc','url' = 'jdbc:postgresql://localhost:5432/mydb','table-name' = 'users','sink.upsert-materialize' = 'NONE',  -- 啟用 Upsert 模式'sink.primary-key' = 'id'            -- 指定主鍵
    );
  • Hudi/Iceberg:利用數據湖的?MERGE INTO?能力。


4. 事務一致性(精確一次語義)

場景:確保每條數據在目標端被處理且僅處理一次。

實現方式

  • Flink 兩階段提交(2PC)

    • 與支持事務的目標系統(如 Kafka 0.11+、JDBC)集成。

    • 在 Checkpoint 完成時提交事務。

配置示例

sql

-- Kafka Sink 的精確一次配置
CREATE TABLE kafka_sink (id INT,name STRING
) WITH ('connector' = 'kafka','topic' = 'users_topic','properties.bootstrap.servers' = 'localhost:9092','format' = 'json','sink.delivery-guarantee' = 'exactly-once',  -- 啟用精確一次'transactional-id-prefix' = 'cdc-sync-'      -- 事務ID前綴
);

5. 異常處理與監控

  • 斷點續傳:依賴 Checkpoint 恢復狀態,無需人工干預。

  • 監控指標

    • flink_cdc_source_latest_offset:當前消費的 Binlog 位點。

    • flink_cdc_source_snapshot_rows:全量階段已同步行數。

  • 錯誤恢復

    • 自動重試:通過 Flink 的重試策略處理臨時錯誤。

    • 死信隊列:將失敗數據寫入側輸出流(Side Output)人工處理。


6. MySQL 端配置要求

確保 MySQL 滿足以下條件:

  1. Binlog 配置

    ini

    [mysqld]
    log_bin=mysql-bin
    binlog_format=ROW            -- 必須為 ROW 模式
    binlog_row_image=FULL        -- 記錄完整行數據
    server_id=1                  -- 唯一ID
    expire_logs_days=7           -- Binlog 保留時間需大于同步延遲
  2. 用戶權限

    sql

    GRANT SELECT, RELOAD, SHOW DATABASES, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'flink_user'@'%';

總結:一致性保障鏈條

  1. 源頭:MySQL Binlog 提供有序變更事件。

  2. 采集端:Flink CDC 通過 Checkpoint 持久化狀態。

  3. 處理端:冪等寫入 + 事務機制。

  4. 目標端:支持 Upsert 或事務的存儲系統。

通過以上機制,Flink CDC 可實現?端到端的精確一次(Exactly-Once)一致性

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/92297.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/92297.shtml
英文地址,請注明出處:http://en.pswp.cn/web/92297.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

上傳文件至華為云OBS

1 創建華為云Bucket1.1 創建Bucket1.2 獲取Bucket的Endpoint1.3 獲取訪問憑證注:每個訪問密鑰僅能下載一次,為了賬號安全性,建議您定期更換并妥善保存訪問密鑰。不再使用的訪問密鑰,建議停用和刪除。2 創建Sprint Boot工程創建一個…

使用驅動移除內核回調,

https://br-sn.github.io/Removing-Kernel-Callbacks-Using-Signed-Drivers/ 原創 大藍 RJ45實驗室 使用簽名驅動移除內核回調-安全KER - 安全資訊平臺 介紹 創建該PoC的目的是了解驅動漏洞利用程序的強大功能,以及EDR如何使用內核回調以防止惡意軟件的攻擊。…

從零搭建Cloud Alibaba (下) Sentinel篇

1.Sentinel控制臺的安裝 下載地址: Releases alibaba/Sentinelx 下載后是一個jar包 進入目錄 CMD命令 java -jar "sentinel-dashboard-1.8.8 .jar" 如果發生了端口沖突則使用以下命令啟動 修改端口號為8090 java -Dserver.port8090 -jar "sen…

Numpy科學計算與數據分析:Numpy數學函數入門與實踐

Numpy數學函數實戰:探索數學運算的無限可能 學習目標 通過本課程的學習,學員將掌握Numpy中常用的數學函數,包括三角函數、指數函數和對數函數的使用方法,以及如何利用這些函數對數組進行高效的數學運算。本課程不僅會講解理論知識…

BIGO Ads是什么?BIGO廣告營銷核心玩法解析

在全球化競爭白熱化的當下,BIGO Ads憑借其覆蓋150國家的龐大流量池和AI驅動的精準營銷能力,已成為出海企業突破增長瓶頸的利器。2025年Q1數據顯示,BIGO Ads廣告業務同比增長27%,非直播收入占比達24.9%,成為歡聚集團第二…

人工智能領域、圖歐科技、IMYAI智能助手2025年3月更新月報

2025年3月AI領域重要技術進展與平臺更新概覽 2025年3月,人工智能領域迎來一系列重要技術更新與平臺功能迭代,尤其在多模態模型、圖像生成編輯、視頻生成、大型語言模型(LLM)性能提升等方面表現活躍。以下是對關鍵進展的梳理&#…

STM32HAL 快速入門(一):點燈前的準備 —— 從軟件安裝到硬件原理

前言 大家好,這里是 Hello_Embed。嵌入式開發的 “Hello World” 是點燈 —— 通過控制單片機引腳的高低電平,讓 LED 亮滅。要實現這個功能,前期準備必不可少:從軟件安裝到硬件原理理解,每一步都很關鍵。本文就來詳細說…

Python網絡編程技術

一、網絡編程基礎概念 1.1 什么是網絡編程? 定義:程序通過網絡與其他程序進行通信的技術。核心目標:實現數據在不同主機或進程間的傳輸與交互。應用場景:Web服務、API調用、實時通信、分布式系統等。 1.2 網絡通信模型 OSI七層…

基于PHP的快遞管理系統的設計與實現

管理員:登錄:管理員可以通過用戶名和密碼登錄系統,進入管理員后臺管理界面。個人中心:管理員可以查看和編輯個人信息,如姓名、聯系方式等。用戶管理:管理員可以管理系統中的用戶信息,包括添加新…

WPF的C1FlexGrid的單元格回車換行輸入

重寫C1FlexGrid的按鍵事件PreviewKeyDown"flex_PreviewKeyUp" 定義按鍵方法private void flex_PreviewKeyUp(object sender, KeyEventArgs e){if (e.Key Key.Enter){// 獲取當前編輯的單元格var cell CfgReviewItem.Selection;if (cell.Column > 0 && …

簡單部署普羅米修斯(Promethus)與Grafana配置

環境信息:系統版本ubuntu2404k8s版本v1.22.2promethus節點IP192.168.31.210Grafana節點IP192.168.31.210node1節點IP192.168.31.214node2節點IP192.168.31.215部署Promethus(https://prometheus.io/download/) wget https://ghfast.top/https…

Redis 編譯錯誤:缺少靜態庫文件,如何解決?

目錄 一、問題背景 二、問題分析 三、解決方案:手動編譯缺失依賴 四、重新編譯 Redis 主程序 五、小結與補充建議 一、問題背景 在從源代碼編譯 Redis(如 8.0.3 版本)時,很多開發者可能會遇到如下錯誤信息: /us…

vscode+latex本地英文期刊環境配置

1、首先進行vscode的配置安裝,這個網上很多教程直接安裝就可以,我建議安裝vscode就行(https://code.visualstudio.com/Download),vs studio稍微有點復雜而且有點大沒必要,單寫論文和簡單的代碼編譯&#xf…

8.6 CSS3rem布局

rem布局 rem (font size of the root element)是指相對于根元素的字體大小的單位。簡單的說它就是一個相對單位。看到rem大家一定會想起em單位,em(font size of the element)是指相對于父元素的字體大小的單位。它們之…

第十五章、非合作關系設定下的多智能體強化學習

0 前言 根據上一章的內容,已知完全合作關系下的多智能體利益一致有相同的目標,而非合作關系下實際上智能體的獎勵和回報都是不一樣的,它們都在努力讓自己的利益最大化而并不考慮整體利益。 1 非合作關系設定下的策略學習要注意的點&#xff1…

分布式微服務--GateWay(過濾器及使用Gateway注意點)

前言、Spring Cloud Gateway 與 Web 依賴沖突 <!-- 下面兩個依賴不能同時使用 --><!-- Gateway 組件 --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId><ve…

latex in overleaf快速通關論文排版

文章目錄 0 有效連接匯總 1 簡介 1.1 latex是什么 1.2 overleaf是什么? 2 快速上手 步驟1 注冊 步驟2 使用 (1) 找模板 (2) 整體論文的overleaf結構 (3) 編輯內容 打開可視化編輯 實時編譯 編輯 (4) 導出 3 常規操作 3.1 公式 3.2 表格 3.3 圖片 3.4 引用 3.5 代碼塊 3.6 設置…

OO SALV的欄位功能

SALV的欄位功能主要是通過CL_SALV_COLUMN_TABLE和CL_SALV_COLUMNS_TABLE這兩個類的實現的。 SALV的欄位屬性的詳細功能包括異常狀態圖標、圖標、符號、復選框、按鈕、熱點、超鏈接、單元格類型、單元格顏色、某一欄位顏色、某一行顏色&#xff0c;欄位隱藏等。關于顏色等樣式屬…

第2章:建模篇——第1節:點線面的選擇與控制

目錄 1.模式的切換 &#xff08;1&#xff09;編輯模式的切換 &#xff08;2&#xff09;點線面的切換 2.點線面的選擇 &#xff08;1&#xff09;選擇的設置 &#xff08;2&#xff09;循環選擇 3.點線面的控制 4.總結 1.模式的切換 &#xff08;1&#xff09;編輯模…

深入解析嵌套事務:原理與應用

嵌套事務是指在事務執行過程中啟動另一個事務形成的層級調用結構&#xff0c;主要用于處理跨服務或復雜業務場景的事務一致性控制。其核心是通過事務傳播機制管理多個操作的原子性&#xff0c;具體原理和應用如下&#xff1a;一、核心概念與工作原理層級結構 嵌套事務由頂層事務…