基于 DTS 同步 MySQL 全增量数据至 CKafka,构建实时数仓的最佳实践

news2024/11/19 9:21:30

背景介绍

随着 IT 技术与大数据的不断发展,越来越多的企业开始意识到数据的价值,通过大数据分析,可以帮助企业更深入地了解用户需求、更好地洞察市场趋势。目前大数据分析在每个业务运营中都发挥着重要作用,成为企业提升市场竞争力的关键举措之一。通常企业会构建数据湖仓,将多个数据源通过数据集成技术,汇集一起进行数据分析。由此,数据集成成为了构建数据湖仓的必经之路,然而企业在数据集成过程中却面临很多棘手问题。

  • 全量+增量数据集成割裂。

传统的数据集成大多仅支持全量数据,对于全量+增量的一并集成,则需要分别部署链路,获取到数据后再手动合并。

  • 多个数据源头,操作与维护复杂。

表结构频繁变更,无法自动同步表结构变更到数据湖仓,手动维护成本高。另外无法”一键”整库同步,追加同步对象操作复杂等。

  • 数据获取时效性差。

传统的数据集成技术建模路径较长,按照T+1的方式同步到数据仓库中,时效性差。需要做到实时数据集成和分析,才能帮助用户根据最新的数据做出更快、更准确的决策。

基于数据集成的核心痛点和用户诉求,近期腾讯云数据传输服务 DTS 联合 CKafka 重磅发布全新数据集成方案,该方案采取全增量数据一起的同步方式,将数据源先同步到 CKafka,再从 CKafka 消费数据投递到数据湖仓,可以有效帮助用户解决数据湖仓建设前期数据集成的问题。

基于 DTS 的数据集成方案

DTS 在做数据集成方案的初期,产研团队做了非常充分的调研,并分析出了用户的核心诉求,主要聚焦以下四个方面:

  • 支持全量+增量数据同步:方便快速将全量+增量数据全部同步至下游数据分析工具中。

  • 按序消费:数据消费时需要按照数据生产的顺序进行。

  • 数据不丢失:数据在下游消费时至少要出现一次,不能丢失业务数据。

  • 维护便捷:库表结构变更,或者库表对象追加需要方便操作。

DTS 的「数据订阅」模块可以应用于数据集成并分发到下游的场景中,但订阅模块主要处理增量数据,无法实现全量+增量一起同步。经过多次的技术探讨和验证后,我们最终决定基于「数据同步」模块来做数据集成,技术方案:数据源先通过 DTS 同步数据到 CKafka,再从 CKafka 消费数据投递到数据湖仓。

不过实际落地中,我们还是遇到了一些挑战。

全量部分数据块很大,如何提升导出导入效率?

使用 DTS 数据同步模块来做数据集成,可以满足全量+增量一起同步的诉求,但在大数据场景下,又不得不面临两个问题:对于大表(如10亿行以上),如何提升同步作业效率?对于超大的存量数据,在全量阶段遇到任务中断时,如何确保数据重入?

基于以上问题,DTS 设计了分块导出方案,针对大表场景(如10亿行以上),从源库导出数据时将一张大表分为多个分块,一个分块连接一个线程,这样一张大表就可实现多分块同时导出,提升大表的同步效率。

在导入到目标 CKafka 时,也是按照分块导入的,同时这些分块都会进行标记,如果 CKafka 发生重启,可以根据标记来识别中断的分块位置,从中断的分块开始继续向目标 CKafka 写入。使用这个方式,在遇到 CKafka 异常时,就不需要从头重新写,大大提升用户体验。

多分区,如何保证按序消费?

为了提升用户消费的速率,消息投递到 CKafka 时一般采用投递到 CKafka 的多个分区的形式,多个分区可以并行消费以提升消费速率,但在多分区处理过程中,会涉及投递顺序的问题,需要保证投递到每个分区的消息与业务生产的消息顺序保持一致。

在实现中,DTS 向 CKafka 投递消息时,按照源库日志解析后的顺序来写入,因此可以实现写入 CKafka 顺序与业务生成顺序的一致。

  • 全局顺序性

DTS 在拉取源库的 Binlog 日志时,采用单线程机制,先保证日志解析结果与业务生产顺序保持一致,等写入到 CKafka 的多个分区时,再按照多线程并发,最终实现了每个分区的消息都是按序排列。

这里需要说明下,投递到多 Topic+ 多分区这种形式中,每个分区内的消息都是按顺序投递的,但是多个分区同时消费时,无法保证分区间按序消费,如果用户对消费到的消息顺序有严格要求,建议选择投递到单 Topic+ 单分区的形式。

  • 表级别顺序性

在选择按表名分区的场景中,源库同一个表的数据变更都会投递到目标 Topic 下的同一个分区中,因为日志的解析是按序排列,所以投递到 Topic 分区中的消息也是按序排列。

总之, 不论选择哪种分区策略,DTS 都可以保证投递到各分区中消息的顺序性。

如何保证数据不丢?

要保证同步到 CKafka 的数据一条都不丢,那么所有的数据就需要有迹可循,哪些已经同步过了、哪些还没有同步过,都必须清楚可查。于是 DTS 通过对数据做标记,标识数据同步位置,以此来实现数据准确同步。

全量阶段,数据按照分块机制进行导出导入,DTS 导入到目标端 CKafka 的每个分块都会进行标记,CKafka 异常时,可以识别中断的分块位置继续导入。

增量阶段,DTS 内部处理源库的日志解析时会插入标记,来识别数据写入到 CKafka 的位置,如果任务中断再恢复,通过 DTS 内部标记,可以找到中断的位置,继续增量同步。

库表变更,能否灵活同步?

业务数据库经常会有库表结构的变更,而数据集成需要能识别并自动同步这些变更字段,否则,库表结构每变更一次,就需要手动改一次集成程序,这个维护工作量非常大。在 DTS 以前的链路传输中,库表结构变更的自动同步能力就已经具备了,直接集成即可。但是我们本次需要解决的是,当同步任务已经启动,用户想要追加/删除一个新的库表对象,如何做到一键化操作,让用户便捷维护。

这里,我们以追加一个表对象为例,同步任务已经在进行中,但是运行过程中发现需要新增一个表对象(例如表A),对用户来说,只需要在 DTS 任务列表页,进行一步可视化点击操作即可完成。

动态修改同步对象的过程中,其实 DTS 底层做了很多工作,对用户操作层面进行了简化,如上述操作案例:新增一个表对象(例如表A),DTS 需要同步表 A 的历史存量数据,同时,已有的同步任务1还不能受影响。所以在实现中,我们在 DTS 后台构造了一个临时任务2,来负责同步表A的存量数据,当任务2完成后,再将任务1和任务2合并,以此来实现动态追加同步对象的效果。

相对于一般的集成工具,DTS 在库表结构的变更,库表对象增加/删除等方面都是非常友好的,用户只需要在 Web 界面进行操作,一次配置,即可享受长期便利,大大减少用户的维护成本。

接下来,给大家重点介绍 DTS 的数据集成方案是如何配置的。

DTS+CKafka+数据湖仓 生产实践

实践场景

数据源头为 MySQL,通过 DTS 获取 MySQL 的全量+增量数据到消息队列 CKafka,然后适配消费 Demo,将消息投递到数据湖仓。

前期准备

  • 准备腾讯云 CKafka 实例,并创建好消费组和消费 Topic。

  • 准备源数据库 MySQL。

  • 准备执行 DTS 任务的账号,并授权源库和目标库的对应权限。

  • 准备数据湖仓。

数据同步

DTS 的操作比较简单,在腾讯云 Web 界面进行4个步骤即可,无需环境部署。

步骤1:创建 DTS 任务。

购买一个 DTS 任务,源库选择 MySQL,目标库选择 CKafka。

步骤2:设置同步源和目标数据库。

配置 DTS 连接源库和目标库,源库配置中填入 MySQL 的主机地址/端口/用户名/密码,目标库选择 CKafka 实例 ID。

这个步骤主要是验证 DTS 到源和目标库的网络是否打通,对应的用户权限是否满足要求,如果源库有安全组设置需要允许 DTS IP访问,否则网络不通。

步骤3:配置数据同步选项。

这个步骤主要是选择同步的数据格式(Avro、JSON)、数据投递到 CKafka 的哪个 Topic 下、分区策略等。

  • 对于库表结构的变更,一键勾选 DDL,即可在后续自动同步库表结构的变更数据。

  • 选定同步的库表对象后,如果有需要追加,在任务启动后通过修改任务即可添加。

步骤4:校验任务。

上述配置完成后,DTS 会对源和目标库的各项参数进行预校验,如 Binlog 必须开启,并且 binlog_format 需要设置为 row 模式等等,以保证数据同步结果的正确性。

预校验通过后同步任务就可以启动了。

数据消费和投递

步骤1:下载消费 Demo 样例。

DTS 同步任务正常运行后,下载 DTS 消费 Demo 样例,将 Demo 包解压后运行,进行数据消费。

这里以 Go 语言为例,解压 Demo 包后运行 go build -o subscribe ./main/main.go,生成可执行文件 subscribe。

然后运行 ./subscribe --brokers=xxx --topic=xxx --group=xxx --trans2sql=true。这里的 Brokers、Topic、Group 分别填入 CKafka 的地址、消费 Topic 名称、消费组名称。

运行结果显示如下,表示 CKafka 正常连接,消费链路已打通。

步骤2:测试数据结果。

在源数据库上插入一条数据。

INSERT INTO student_school (id, name, school_name) VALUES (9, 'Li Ming', 'Hengshui');

在消费端即可查看到对应数据。

步骤3:修改 Demo,增加适配到后端数仓的代码逻辑。

DTS 提供的消费 Demo 仅对数据做了打印处理,用户需要在 Demo 基础上自行编写数据处理到后端数据湖仓的适配逻辑。

实践效果

使用 DTS 同步到 CKafka 的链路形式替代之前使用 Canal 组件的链路,最终实现高性能传输、高稳定性保障的同时有效降低了运维成本。

  • 传输性能高:DTS 的传输性能与用户实际网络延时、带宽、数据本身的规格配置都有关系,在用户源端和目标端规格都比较高,网络无瓶颈的情况下,项目实测 DTS 全量阶段的 RPS 最高可达30万/s,增量阶段最高可达1.5万/s。

  • 稳定性强:DTS 可提供高 SLA 保证,任务稳定性极强。

  • 运维成本低:用户之前使用 Canal 组件时,平均每月大概需要半个人力投入到研发和运维中,改用 DTS 后,任务配置完成后基本无需运维人员投入,大大减少运维成本。

DTS 提供的同步到 CKafka 数据集成方案具有通用性,目前已成功应用在出行、零售、游戏、互联网、金融等多个行业,并收获了用户的良好口碑。

总结和展望

DTS 目前已上线了 MySQL 系列数据库同步到 Kafka 的链路,为用户在大数据集成中提供了便捷的技术通道,后续为了满足用户更多的需求和更高的使用体验,DTS 和 CKafka 将聚焦「数据库生态」和「产品体验」上持续发力。

  • 数据库生态方面:持续拓宽数据库生态,支持其他类型的数据库同步到 CKafka,如MongoDB,Oracle,PostgreSQL 等同步到 CKafka。

  • 产品体验方面:支持更多高阶特性,如全量阶段支持数据可重入,投递到多 Topic 的策略优化等等。

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

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

相关文章

【最短路dij】牛客练习赛112D qsgg and Subway

D-qsgg and Subway_牛客练习赛112 (nowcoder.com) 题意&#xff1a; 思路&#xff1a; 感觉这类题难的地方就是更新v的那个值比较难求 思路&#xff1a; #include <bits/stdc.h>#define int long longusing namespace std;const int mxn1e610; const int mxe1e610; co…

G1垃圾回收参数调优及MySQL虚引用造成GC时间过长分析 | 京东云技术团队

1. 背景 我方有一应用&#xff0c;偶尔会出现GC时间过长&#xff08;间隔约4小时&#xff09;&#xff0c;导致性能波动的问题(接口最长需要耗时3秒以上)。经排查为G1垃圾回收器参数配置不当 叠加 MySQL 链接超过闲置时间回收&#xff0c;产生大量的虚引用&#xff0c;导致G1在…

wordpress里的日主题ripro登录一直返回0,或者循环登录

如以下网站&#xff1a;爱豆坤坤博客_最爱蔡徐坤&#xff0c;专注活动&#xff0c;软件&#xff0c;资源&#xff0c;教程分享!。点击登录后一直提示登录。或者返回0.具体原因是因为插件乱用导致。需要查看文件wp-load.php 删除最后的include("/www/wwwroot/25qi.cn/wp-co…

c语言通讯录——文件版本(带详细文字解释)

1.定义一个用于存储一个人的信息的结构体 typedef struct PeoInfo {char name[NAME_MAX];int age;char sex[SEX_MAX];char addr[ADDR_MAX];char tele[TELE_MAX]; }PeoInfo;定义了一个名为 “PeoInfo” 的结构体&#xff08;struct&#xff09;类型&#xff0c;用于存储有关一个…

想知道AI智能绘画是什么?三分钟告诉你如何生成ai绘画

你是否曾经幻想过让电脑也能像大师一样创作出美丽的艺术作品&#xff1f;AI智能绘画就是这样一门神奇的技术&#xff0c;它将人工智能与绘画艺术相结合&#xff0c;为我们呈现了一场令人惊叹的创造魔术。那么到底AI智能绘画是什么呢&#xff1f;让我们一起揭开它的神秘面纱&…

低代码平台其中两大优势

低代码开发平台本质上是一种的软件开发工具&#xff0c;通过把常用功能控件进行组件化封装、将常用业务场景进行模板化&#xff0c;通过可视化模式进行进行开发。相比传统编码开发模式具有开发效率高、开发成本更低的明显优势。 低代码开发是如何提高开发效率和降低成本的呢&am…

Navicat连接oracle

1、官网下载oracle instant client客户端&#xff08;版本自选&#xff09; Oracle Instant Client Downloads 下载后解压 2、navicat配置 在工具-> 选项 -> OCI 或环境中&#xff0c;选择在步骤 1 解压目录的 oci.dll 3、重新启动 Navicat 4、配置oracle连接即可 参考…

Excel 经常复制粘贴失效,复制表格粘贴不了无反应,怎么解决?

环境&#xff1a; Win10 专业版 Excel2021 L盾加密客户端 wps2021 问题描述&#xff1a; 之前正常的&#xff0c;excel2016和2021 经常复制表格粘贴不了无反应每隔10几分钟随机出现&#xff0c;在表格外面复制粘贴没有问题&#xff0c;把外面东西&#xff0c;粘贴进表格里…

阿里一年香~

一年香照片&纪念品 一年香感悟 身份转变 从学生身份变为社会打工人&#xff0c;深知父母挣钱的不易与艰辛&#xff0c;也懂得了朝十晚九的生活。不要焦虑&#xff0c;开心过好每一天。 沉稳与笨拙 从原来的120斤到现在的140斤&#xff0c;真是又沉又稳。现在周六上午打…

Android JNI 学习实践

目录介绍 01.学习JNI开发流程 1.1 JNI开发概念1.2 JNI和NDK的关系1.3 JNI实践步骤1.4 NDK使用场景1.5 学习路线说明 02.NDK架构分层 2.1 NDK分层构建层2.2 NDK分层Java层2.3 Native层 03.JNI基础语法 3.1 JNI三种引用3.2 JNI异常处理3.3 C和C互相调用3.4 JNI核心原理3.5 注册N…

应用自动开启辅助(无障碍)功能并使用辅助(无障碍)功能

一.背景 由于最近的项目需要开启无障碍功能然后实现对应的功能需求,但是由于需求是需要安装后就开启辅助功能,不要在繁琐的在设置中开启辅助功能,所以需要如何在应用中开启辅助功能。 二.前提条件 将普通应用转换成系统应用,然后将系统的framework.jar包放到应用中并且可以…

【知识总结】邀请功能的实现分析

邀请功能 功能分析 场景&#xff1a;项目中出现用户邀请其他用户加入群组的功能 需求&#xff1a;用户点击生成邀请链接可以生成一个url&#xff0c;将这个url分享给其他用户&#xff0c;其他用户点击后对用户登录状态进行校验&#xff0c;校验通过即可加入群组&#xff0c;…

QLORA:量化LLMA的有效微调

文章目录 摘要1、简介2、背景3、QLORA微调4、QLoRA vs.标准微调5、用QLoRA推动聊天机器人达到最高水平5.1、实验设置5.2、评价5.3、Guanaco:在OASST1上使用QLORA训练的最先进的聊天机器人 6、定性分析6.2、注意事项 7、相关工作8、限制与讨论9、更广泛的影响致谢QLoRA与标准微调…

css实现毛玻璃磨砂效果

预览效果 实现原理&#xff1a; backdrop-filter CSS 属性可以让你为一个元素后面区域添加图形效果&#xff08;如模糊或颜色偏移&#xff09;。 因为它适用于元素背后的所有元素&#xff0c;为了看到效果&#xff0c;必须使元素或其背景至少部分透明。 完整代码&#xff1a; …

3D创作应用《Masterpiece X》上线Quest平台

6月25日青亭网报道&#xff0c;《Masterpiece X》是一款3D创作类应用&#xff0c;主要特点是通过面向普通用户&#xff0c;提供更简单易用的创作工具。目前已经上线Quest 2和Quest Pro&#xff0c;重要的是这是一款免费工具。 该作来自于Masterpiece Studio&#xff0c;开发历经…

百度脑图切换账号

当然是清除cookie了&#xff01; 方法 在百度脑图页面右键&#xff0c;点检查 点小箭头&#xff0c;找到应用 找到cookie下的naotu.baidu.com&#xff0c;右键清除&#xff0c;然后刷新页面 重新登录&#xff0c;就有了

HTML系列

快捷键 表格快捷键&#xff1a;table>trn>tdn{a}&#xff08;n行n列&#xff0c;内容均为a&#xff09;无序列表快捷键&#xff1a;ul>li*n&#xff08;n代表无序列表的数量&#xff09; 对应表格快捷产出的样式&#xff08;不用管table内的参数设置&#xff0c;这里…

在windows上可视化redis中间件

首先需要下载一下RedisDesktopManager这个可视化工具&#xff0c;在很多CSDN博客上都有博主进行介绍&#xff0c;其实就是一个傻瓜式安装。 windows下安装redis的话可以去B站上查看一下怎么安装&#xff0c;主要是在github上去下载&#xff0c;目前更新的比较快&#xff0c;不…

winform项目-C#面向对象程序设计,深入浅出入门和进阶实战开发解决方案必知点 3 数组,循环,判断的综合案例,业务场景的初步应用尝试和快速实现

只能说白天真的很多的事情&#xff0c;但是具体什么事情呢&#xff0c;哦&#xff0c;好像去了一趟码家&#xff0c;然后上午的时间就一直在那边了&#xff0c;哄孩子&#xff0c;sister and boy。别人看起来&#xff0c;好像要说儿女双全了呢&#xff0c;不是非常令人羡慕的事…

Jetson 开机报错:no module named jtop.core.jetson_variables

环境说明&#xff1a; ubuntu18.04&#xff0c;python3.6. jetpack4.6.4&#xff0c;jetson-stats4.0.0rc3 开机报错如下 报错分析 Error found when loading /etc/profile, 因此打开该文件查看&#xff0c;文件内容指向 /etc/profile.d 文件夹&#xff0c;打开该文件夹 发现存…