基于Apache SeaTunnel构建CDC数据同步管道

news2024/12/24 9:10:09

file

引言

在快速发展的数据驱动时代,数据的实时、准确同步成为了企业信息系统不可或缺的一部分。随着技术的进步,特别是在分布式计算和大数据技术的背景下,构建一个高效且可靠的数据同步管道成为了挑战。

Apache SeaTunnel作为一个先进的数据集成开发平台,提供了构建高效CDC数据同步管道的可能性。本文将深入探讨利用Apache SeaTunnel构建CDC数据同步管道的过程,揭示其背后的关键技术和实践策略,旨在为面临数据同步挑战的专业人士提供实用指导。

大家下午好,今天分享的主题是基于Apache SeaTunnel构建CDC数据同步管道。我之前主要从事监控APM的计算平台工作,后来转向数据集成开发平台。目前,我正在基于Apache SeaTunnel开发CDC的数据同步管道,长期活跃于开源社区。我是Apache SeaTunnel的PMC成员和Skywalking的committer。

Apache SeaTunnel 简介

Apache SeaTunnel是一个数据集成开发平台,其发展经历了几个重要阶段: file

  1. ETL时代(90年代):面向结构化数据库的数据同步,用于构建数据仓库。
  2. MPP和分布式技术流行:使用技术如Hive进行数据仓库的构建。此阶段主要使用mapreduce程序进行数据搬运和转换。
  3. 数据湖技术流行:重视数据集成,强调先同步数据至数据湖仓储,再进行业务面向的转换和设计。

file

技术定位与挑战

file

Apache SeaTunnel在ELT环节中,主要解决简单的转换问题,并快速搬运数据。面临的挑战包括:

  • 处理多样化的数据源和存储差异。
  • 尽量减少对数据源的影响。
  • 适应不同的数据集成场景,如离线和实时CDC同步。
  • 保证数据集成的监控和量化指标。

重要特性

  • 简单易用:No code,通过配置文件提交作业。
  • 运行监控:提供详细的读写监控。
  • 丰富的生态:插件式架构,提供统一的读写API。

Apache SeaTunnel的发展历程

Apache SeaTunnel的前身是Whatdorp。它于2021年加入Apache孵化器,并在2022年发布了第一个版本。2022年10月,进行了重大重构,引入统一API。

file

2022年11月,开发了专门用于数据同步的引擎。到2022年底,连接器的读写功能已经支持超过100种数据源。到2023年,主要集中于CDC和整库同步。

file

CDC(Change Data Capture)简介

file CDC,即变更数据捕获,是一种捕获数据库变更事件(如插入、更新、删除)的技术。在业务数据库中,数据不断变更,CDC的作用是捕获这些事件,并同步到数仓、数据湖或其他平台,确保目标存储与原始数据库保持一致。 file

CDC的应用场景

  1. 数据复制:如备库建设或读写分离。
  2. 数据分析:在大数据平台进行基于BI的数据分析。
  3. 检索业务:例如,将商品库或文档库同步到ES等检索平台。
  4. 操作审计:记录系统变更,用于金融审计等。

常见的CDC方案的痛点

  1. 单表作业限制:大多数开源方案中,一个作业通常只能处理一个表。
  2. 读取与写入分离:一些平台专注于数据捕获,而另一些只负责数据写入。
  3. 多数据库支持问题:不同的数据库可能需要不同的同步平台,增加了维护难度。
  4. 大规模表处理困难:处理大型表时可能遇到性能瓶颈。
  5. DDL变更同步:实时同步数据库结构(DDL)变更是一个复杂且重要的需求。

Apache SeaTunnel在CDC中的应用

file Apache SeaTunnel作为一个连接器,可以实现抽象的Source API和Sink API,即读写API,以实现数据的同步。它的设计目标是:

  1. 支持多种数据库:如MySQL、Oracle等。
  2. 零编码:自动建表和动态增删表,无需编写代码。
  3. 高效读取:先进行数据快照,再跟踪binlog变化。
  4. 确保一致性:实现exactly-once语义,即使在中断恢复情况下也不会出现数据重复。

Apache SeaTunnel CDC的设计实践重点

file 在于处理数据同步的两个阶段:快照读取和增量跟踪。 file

快照读取阶段

基本流程
  • Chunk划分(Splitting):为了高效同步大量历史数据,表被划分为多个chunk(或split),每个chunk处理一部分数据。
  • 并行处理:每个表分成多个split,这些split通过路由算法分配给不同的reader进行并行读取。
  • 事件反馈机制:每个reader在完成split读取后会向split分发器报告进度(watermark)。 file

file

Split详解
  • 组成:Split包括唯一ID、指向的表ID、以及划分细节(如数据范围)。
  • 划分方法:Split可基于不同类型的列(如数字或时间)进行范围划分。
  • 处理过程:划分后的split被分发给reader,每个split的读取完成后会报告数据水位线。

file

增量跟踪阶段

单线程流读取

file

  • 流读取特性:与快照阶段的并行读取不同,增量跟踪通常为单线程操作。
  • 减少业务压力:避免重复拉取binlog,减轻对业务数据库的压力。

file

file

file

Split管理
  • 无终止的Split:增量阶段的Split没有结束点,意味着流读取是持续的。
  • 水位线管理:增量Split包含所有快照Split的最小水位线,从最小位置开始读取。
  • 资源优化:一个reader占用一个连接,保持高效且资源优化的数据跟踪。

Apache SeaTunnel CDC的设计允许有效地同步历史数据(快照读取)和实时变更(增量跟踪)。通过Split管理和资源优化策略,确保数据同步既高效又对原始数据库影响最小。

Apache SeaTunnel CDC的Exactly-Once实现

file

Apache SeaTunnel CDC实现Exactly-Once语义的核心在于处理数据同步中的不一致性和系统故障。

file

Exactly-Once的实现机制

快照读取的水位线管理
  • 低水位与高水位:在快照读取时,首先记录低水位线,读取结束后记录高水位线。这两个水位线之间的差异表明数据库在此期间发生了变化。
  • 内存表合并:低水位和高水位之间的变更会被合并到内存表中,确保未遗漏任何变更。

file

file

Split与Split之间的间隙处理
  • 处理数据间隙:处理Split间的数据间隙,确保没有遗漏变更。
  • 反向过滤与回捞:快照阶段的每个数据点都会检查以确保没有被之前的Split覆盖,避免数据重复。
  • 阶段性校对:分为两个阶段(Stage 1和Stage 2),分别处理Split间的间隙和表间的间隙,确保所有变更都被捕获。

断点续传与分布式快照

分布式快照机制

file

  • 不同引擎适配:分布式快照API适配不同的执行引擎,确保状态一致性。
  • 检查点保存:定期发起检查点保存操作,所有组件上传自己的状态,保存完整的检查点状态。
  • 恢复选择:在恢复时,可以选择任何一个检查点版本进行恢复。

file

分布式状态对齐
  • 进程间状态同步:处理多个进程内的不同内存状态,确保它们在一个时间点达到一致状态。
  • 信号传播与保存:从一个进程发起分布式快照信号,其余进程根据信号保存自己的状态并传递信号,直至所有节点状态对齐。
  • 实际应用:在CDC任务中,枚举器节点、读取节点、写入节点均参与这一过程,保证整个数据同步过程的状态一致性。

DDL同步的深入探讨

file

在Apache SeaTunnel CDC中,DDL同步是一个关键的挑战。由于数据库结构可能在数据流处理过程中发生变化,因此必须谨慎处理这些变更。

DDL解析与抽象化
  • DDL事件解析:DDL事件首先被解析并转换为结构化的抽象形式,这样做的目的是将DDL处理过程与特定数据库的语法细节解耦。
  • 结构化事件处理:例如,添加列的操作被转换为一个通用的结构化事件,不再依赖于具体数据库的语法。

file

数据流与结构流的分离
  • 信号插入:在DDL操作前后,系统会插入特定的信号以分离结构流和数据流。这样做允许在DDL操作期间暂停数据处理,避免在结构变更期间发生数据混乱。
前置与后置信号处理
  • 前置信号:在DDL操作前,清空内存中的数据状态,并暂停数据处理,以确保结构变更前的数据完整性。
  • 后置信号:DDL操作完成后,系统恢复数据处理,并继续之后的数据同步。 file

file

file

数据传输的细节优化

file 在数据传输方面,Apache SeaTunnel CDC通过一系列优化,确保数据同步的效率和一致性。

数据操作的类型化处理
  • 插入(Insert):处理新增数据,仅涉及操作后的状态。
  • 更新(Update):涉及操作前后的状态变化,需要精确处理以确保数据一致性。
  • 删除(Delete):只关注操作前的状态,因为数据在操作后不再存在。
高效的数据流管理

为了提高效率,CDC在数据流管理方面做了大量优化:

  • 表级数据拆分:保证同一表内的数据处理的有序性。
  • 键级数据排序:同一键的数据操作按顺序处理,保证数据状态的正确性。
  • 并行数据写入:同一表内的数据可以并行写入,提高了数据处理的速度。
更新优化

file

对于不支持更新操作的目标存储,CDC采取了一种优化策略:将更新操作转换为先删除后插入操作,从而绕过存储的限制。

共享挖掘与多目标写入

file

为了减少对原始数据源的负担,CDC采用共享挖掘机制。这意味着数据被一次读取,然后共享给多个写入插件,允许数据被写入到多个目标存储。这种方法有效地整合了原本分散的数据读写流程,提升了整体效率。

自动建表

目的
  • 自动转换:将原库的表结构自动转换到目标库,适用于不熟悉业务库表结构或表数量庞大的场景。
实现过程

file

  1. 表结构推送:将配置的所有表转换为通用的数据类型和表结构。
  2. 与写入插件的交互:启动时,插件接收表结构,检查并在目标库创建或更新表。
  3. 类型提升:处理异构数据库中的类型不匹配问题,如将小类型提升到大类型。

社区发展与参与

file

当前发展

  • 多表读写:推进多表和多引擎支持。
  • API推广:将自动建表等API推广到社区,实现在各插件中。
  • 连接器升级:升级连接器以支持新的多表读写功能。
  • DDL解析:开发支持目标端表结构的DDL解析功能。

Web界面

  • 发布与完善:发布并持续完善,支持不同数据库的数据查询和同步任务配置。

社区参与

  • 加入社区:通过官方微信公众号或加入中文用户群获取更多支持。
  • 在线资源:通过项目的issue系统、Slack频道或官网获取资源和支持。
  • 贡献与沟通:下载试用、报告bug、查看新手任务,或通过邮件列表和Slack进行沟通。

file

本文由 白鲸开源科技 提供发布支持!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1321855.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数组|73. 矩阵置零 48. 旋转图像

73. 矩阵置零 **题目:**给定一个 m x n 的矩阵&#xff0c;如果一个元素为 0 &#xff0c;则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 题目链接&#xff1a;矩阵置零 class Solution {public void setZeroes(int[][] matrix) {Stack<int[]> mapofzerone…

产品入门第六讲:Axure中继器

&#x1f4da;&#x1f4da; &#x1f3c5;我是默&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; ​​​​​​ &#x1f31f;在这里&#xff0c;我要推荐给大家我的专栏《Axure》。&#x1f3af;&#x1f3af; &#x1f680;无论你是编程小白&#xff0c…

解锁终端安全的钥匙:深度了解迅软DSE桌面管理系统

随着信息化的快速发展&#xff0c;企业内部计算机终端数量不断攀升&#xff0c;成为网络整体安全管理的关键环节。越来越多的企业认识到终端安全管理的重要性&#xff0c;纷纷采取综合规划来应对这一挑战。为了满足广大用户对桌面终端管理的需求&#xff0c;迅软DSE推出了一套全…

微博被封禁如何解决

1.电脑搜索互联网信息投诉平台&#xff0c;点击我要投诉 2.找到互联网企业&#xff0c;选择新浪微博 3.然后填写个人信息&#xff0c;这里正常填写就行 4.填写信息 5.截图 6.成功

Qt实现动画的2种方式

由于我之前是写java的所以在学习Qt的时候感觉会有点熟悉&#xff0c;因为Qt就是 用c写&#xff0c;而java底层也是c实现的 先看效果&#xff1a; 一、使用QMovie 这种方式我目前是用来加载gif图的&#xff0c;很简单噢&#xff0c;只不过我是加载的本地的路径&#xff0c;如…

【NSX-T】7. 搭建NSX-T环境 —— 部署和配置 Edge Cluster

目录 7. 部署和配置 Edge Cluster7.1 配置 Edge 节点&#xff08;1&#xff09;Name and Description&#xff08;2&#xff09;Credentials&#xff08;3&#xff09;Configure Deployment&#xff08;4&#xff09;Configure Node Settings&#xff08;5&#xff09;Configur…

APM固件编译和仿真

事情起因 主要想对无人机APM固件进行仿真的算法验证&#xff0c;因实际飞行的过程实际验证太浪费飞机了&#xff0c;所以就先试用仿真对算法进行仿真开发。 一&#xff0c;环境搭建 环境搭建我建议参考官方英文教程&#xff0c;英文教程写的比较全&#xff0c;不懂可以自己使…

使用Python Scrapy设置代理IP的详细教程

目录 前言 一、代理IP的作用和原理 二、Scrapy框架中设置代理IP的方法 步骤1&#xff1a;安装依赖库 步骤2&#xff1a;配置代理IP池 步骤3&#xff1a;创建代理IP中间件 步骤4&#xff1a;激活代理IP中间件 步骤5&#xff1a;运行爬虫程序 三、代码示例 四、常见问题…

数字化医疗新篇章:构建智能医保支付购药系统

在迎接数字化医疗时代的挑战和机遇中&#xff0c;智能医保支付购药系统的建设显得尤为重要。本文将深入介绍如何通过先进的技术实现&#xff0c;构建一套智能、高效的医保支付购药系统&#xff0c;为全面建设健康中国贡献力量。 1. 引言 随着医疗科技的飞速发展&#xff0c;…

「Verilog学习笔记」交通灯

专栏前言 本专栏的内容主要是记录本人学习Verilog过程中的一些知识点&#xff0c;刷题网站用的是牛客网 timescale 1ns/1nsmodule triffic_light(input rst_n, //异位复位信号&#xff0c;低电平有效input clk, //时钟信号input pass_request,output wire[7:0]clock,output reg…

如何使用示波器探头对被测电路进行检测

对电路信号进行检测之前首先要知道被测电路是什么电路&#xff0c;被测信号是什么信号。盲目地测试或者使用不正确的测量方法&#xff0c;有可能得到错误的波形甚至损坏仪器危及安全。 1、什么是差分信号&#xff1f;什么是单端信号&#xff1f; 差分传输是一种信号传输的技术…

OpenHarmony - 应用开发入门指南

一、了解OpenHarmony OpenHarmony是由开放原子开源基金会(OpenAtom Foundation)孵化及运营的开源项目, 目标是面向全场景、全连接、全智能时代, 搭建一个智能终端设备操作系统的框架和平台, 促进万物互联产业的繁荣发展。 开放原子开源基金会&#xff1a; 由阿里巴巴、百度、华…

前置接口数据引用指南:自动化测试流程优化技巧

当进行 自动化测试 编排时&#xff0c;测试步骤间的数据传递是至关重要的。 在传统的方式中&#xff0c;一般通过复杂的脚本配置&#xff0c;或者手动复制这些数据&#xff0c;然后再慢慢地粘贴到每个需要它们的地方&#xff0c;以此来实现接口之间的参数传递。这种方式往往效…

openwrt 搭建web

折腾 软路由 有几年了&#xff0c;最近试了下 移动的 IPV6, 既然可以拿到 公网的 IPV6&#xff0c; 所以想折腾下, 经过不懈努力 实现了&#xff1a;通过 ipv4/ipv6 地址访问我的 web站点 (白飘不花钱的方式) 1 动态DNS 折腾 DDNS 无非是想 白飘 公网IP&#xff0c;但是 仅仅…

力扣题:数字与字符串间转换-12.25

力扣题-12.25 [力扣刷题攻略] Re&#xff1a;从零开始的力扣刷题生活 力扣题1&#xff1a;481. 神奇字符串 解题思想&#xff1a;首先将字符串构建出来&#xff0c;然后进行遍历即可 class Solution(object):def magicalString(self, n):""":type n: int:rty…

微信小程序校园跑腿系统怎么做,如何做,要做多久

​ 在这个互联网快速发展、信息爆炸的时代&#xff0c;人人都离不开手机&#xff0c;每个人都忙于各种各样的事情&#xff0c;大学生也一样&#xff0c;有忙于学习&#xff0c;忙于考研&#xff0c;忙着赚学分&#xff0c;忙于参加社团&#xff0c;当然也有忙于打游戏的&#x…

arcgis javascript api4.x加载天地图cgs2000坐标系

需求&#xff1a;arcgis javascript api4.x加载天地图cgs2000坐标系 效果&#xff1a; 示例代码&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"wid…

别小看它!现货黄金趋势通道的作用

在现货黄金市场中&#xff0c;我们对趋势通道的熟悉程度不如趋势线。实际上&#xff0c;趋势通道是从趋势线演化而来的&#xff0c;没有趋势线就没有趋势通道。然而很多人不重视趋势通道&#xff0c;认为它只是趋势线的附庸&#xff0c;下面我们就来讨论一下趋势通道的作用。 为…

现控散落知识点梳理【自用/最新】

这里写目录标题 悬而未决之谜✅结合能控分解思考&#xff0c;非奇异线性变换会不会导致某变量的可控可观性发生变化&#xff1f;✅如图所示与时域结合时&#xff0c;传递函数是开环or闭环&#xff1f;✅对于一般状态&#xff0c;给出ABC&#xff0c;怎么判断每个变量的能控能观…

Python入门必看,python语言特点及差别

文章目录 前言一、高级语言分类二、认识Python三、Python 解释器总结Python技术资源分享1、Python所有方向的学习路线2、学习软件3、精品书籍4、入门学习视频5、实战案例6、清华编程大佬出品《漫画看学Python》7、Python副业兼职与全职路线 前言 Python (发音:[ paiθ(ə) n; …