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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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;一、核心概念与工作原理层级结构 嵌套事务由顶层事务…