从第三方数据集成工具迁移到Apache SeaTunnel的实操经验分享

news2024/12/25 12:43:12

在如今这个数据至上的商业环境中,构建一个高效、可靠的数据仓库对企业来说不仅是一项基础性工作,更是推动业务洞察、决策支持和创新的关键,而数据集成技术在此发挥着至关重要的作用,其时效性和准确性直接影响着下游业务的效率和产值。

随着业务需求的不断演化和数据体量的日益增加,挑选一个既能满足当前需求又能适应未来发展的数据集成工具并进行迁移改造变得极为关键。本文主要给大家分享一些通用的数据集成工具迁移经验,以DataX为例,阐述迁移至Apache SeaTunnel的过程和经验,而对于其他数据集成工具,如Sqoop等,此迁移方案同样适用。通过此分享,希望能为社区其他的同行提供参考,帮助那些正在或即将面临类似迁移决策的团队更加顺利地完成转型。

迁移背景

DATAX作为一个稳定且高效的数据同步工具,长期以来服务于我们的数据集成需求。然而,在面对日益增长的数据处理需求时,DATAX在数据源丰富程度、处理能力等的局限性开始显现。

2023年底,我们团队决定从DATAX迁移到Apache SeaTunnel,这是基于对当前市场上主流数据集成技术的深入研究和比较。比较过程中,我们关注了包括但不限于架构设计、引擎性能、社区支持和活跃度、功能的丰富性、处理性能、数据一致性的保障、用户友好度、扩展能力和系统的稳定性等多个维度。Apache SeaTunnel以其卓越的表现在多个方面脱颖而出,特别是在数据源丰富程度、社区活跃度、易用性以及其支持的流批一体处理能力上,为我们的选择提供了坚实的理由。

迁移经验分享

全面的字段类型对比以及特殊字符的转化

在数据迁移过程中,细节决定成败。不少团队在进行数据集成工具迁移时,可能会专注于整体架构和流程的宏观测试,例如确认几个同步任务的顺利运行,就基于此启动迁移工作。

然而,这种方法可能忽略了一些微妙但至关重要的细节,特别是在字段类型的全面测试和特殊字符处理方面。

以字段类型为例, 不同的数据集成工具在处理相同的数据类型时可能会有不同的表现。

  • 例如,在处理数组类型数据时,DataX可能返回以逗号分隔的字符串(如"a,b,c"),而Apache SeaTunnel可能返回数组格式的字符串(如"[a,b,c]")。这种差异可能看似微小,但在数据集成过程中却可能导致重大的数据不一致问题。

此外,对于嵌套数据结构的处理也需要进行详尽的测试。

  • 例如,MongoDB中的文档类型可能包含多种基础数据类型的嵌套,这些嵌套的数据类型在迁移前后是否保持一致,也需要进行仔细的比较和测试。我们在初期的测试中,主要关注了一些基础数据类型,而没有对嵌套类型进行足够的比较和分析,这导致了迁移过程中的一些问题。

如下图所示是我们更改的部分源码截图,事实上,仅Mongo一个数据源,我们数据类型处理相关的源码修改就涉及到多达八处。

特殊字符的处理也是一个需要注意的细节。

  • 例如,DataX可能会将换行符等特殊字符直接替换为空格,而Seatunnel则保留了这些特殊字符。同步数据到Hive并且目标表为textfile格式时,容易导致数据换行错位问题。

需要注意的是,这种差异不仅是存在于DataX的官方代码与Apache SeaTunnel之间,更可能是存在于经过公司内部定制化修改的版本之间,即便发现某些数据转化逻辑不尽合理,也必须和原有的保持一致,否则会影响业务使用。

总之,通过详尽的比对,包括数字、字符串、日期时间等各种字段类型和特殊符号的正确处理。我们严格把控数据在迁移前后的一致性,任何发现的差异都会被记录并作出调整,直至我们的工具Apache SeaTunnel达到与DATAX一致的效果,确保了数据迁移的准确性。

灰度发布/陪跑方案

关于软件组件的灰度发布,通常指的是在进行版本升级时,只替换一部分服务器的做法,以此来降低全面升级导致的风险。我们在Apache SeaTunnel的组件升级过程中,如从2.3.1版本升级到2.3.2版本时,采取了类似的策略。

但是这样也有一个局限,哪个任务使用新版本是随机的,我们有时可能更希望关键任务使用旧版本,非关键任务使用新版本,这样保障关键任务稳定运行的同时,也能让部分非关键任务体验到新版本的改进。于是我们在通用的同步脚本中,通过一个version参数来控制任务级别的灰度,脚本中非常简单就能控制,一行代码的事:

/home/q/dis/apache-seatunnel-${version}/bin/start-seatunnel-flink-13-connector-v2.sh

主要是结合平台的功能,支持批量勾选任务并填写其使用的版本号。基于变更的风险或影响范围,我们可以灵活选择上述两种灰度方案中的任一种进行实施。

不过,本文重点想叙述的是迁移前期一种针对数据更为精细的发布策略——任务(或称为表)级别的灰度发布,或者称作 "陪跑" 更为准确。在金融领域,数据的精确性和完整性是至关重要的,尤其是当涉及到关键SLA数据表时,容不得半点差错。

由于公司具备双数据中心架构,所有同步任务都是同时运行在双机房的,且备用机房的数据表正常情况下无人使用。因此给我们的灰度操作提供了很好的平台,前期ST运行在备机房,DATAX继续运行在主机房,并行作业达半月时间。在这半月中,我们不断地监控两套组件处理的情况,包括但不限于运行耗时、资源消耗、数据条数、数据值。均符合预期后正式上线到主机房。

对于Apache SeaTunnel的运行效率,我们要求2分钟以上任务,ST处理时间必须100%低于DataX。(为什么要定2分钟呢,因为DataX是本地运行的,少了提交到集群等环节,对于极少数据条数的场景,DataX是必然优于Apache SeaTunnel的) 若SeaTunnel的运行耗时超过DataX,我们会立即着手进行深入的分析,以识别性能瓶颈,并实施相应的优化措施,比如我们优化了MONGO同步的切分算法使得任务耗时降低了20%+。

当然,资源消耗也是同样需要关注的指标,我们允许Apache SeaTunnel一定程度上消耗更多的资源,但从实施来看,基本是同等资源就可以达到时效的提升,最高提升40%。

更为关键的,在数据一致性的验证方面,我们对Hive表中的数据执行了精确的比对工作。此项工作不仅限于数量的比较,更涉及到了数据值的精确校验。我们确保只有在彻底验证两套系统处理的数据在各个维度上完全一致、无任何偏差时,才进行了正式的系统切换。

在这一过程中,数据比对工具的作用不可或缺。鉴于我们的主要目标数据存储平台是Hive,因此我们专门开发了针对Hive表的数据比对工具。该工具不仅能够比对数据记录的数量,还能够逐列比对记录的值,比对结果差异会输出到一个表中便于用户查看。这使得我们能够对半个月的数据,即上亿条记录进行全面比对,有效避免了仅依靠部分数据抽样比对可能导致的疏漏。

主备切换方案

即使有了上面如此严格的灰度发布方案和陪跑方案,我们还是不放心。

面对一项尚不成熟的新技术,而公司内部尚缺乏相应的技术专家时,遇到未预料的技术挑战尤为危险。若Apache SeaTunnel遭遇未知异常,且无法迅速解决,将严重威胁业务决策和数据分析流程,甚至可能导致重大生产事故。鉴于公司对SLA的严格要求,故障发生时,我们几乎没有余地进行深入研究和问题排查。

为应对此类风险,我们又从组件层面,设计了一套主备方案。该方案的核心在于确保,在Apache SeaTunnel遇到故障的情况下,DataX能够迅速、无缝地接管数据同步任务,维持业务连续性。

如下图所示,不论是新表同步任务,还是历史迁移任务,我们都会有两套脚本,无法快速解决问题时先快速切换到另一组件进行同步。

总结

在数据集成工具迁移到Apache SeaTunnel的过程中,我们注重全面细节对比,如字段类型和特殊字符处理等,实施了严格的灰度发布方案、陪跑方案和主备切换方案,以确保数据的时效性、准确性和业务连续性。

总的来看,这次的迁移充分考虑了各种可能的挑战和风险,并且在实施过程中做出了相应的应对措施,体现了数据集成工具迁移的严谨性。

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

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

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

相关文章

连接Redis不支持集群错误,ERR This instance has cluster support disabled,解决方案

1. 问题背景 调整redis的配置后,启动程序时, 会报如下错误: [redis://172.16.0.8xxx]: ERR This instance has cluster support disabledSuppressed: io.lettuce.core.RedisCommandExecutionException: ERR This instance has cluster supp…

电商技术揭秘四:电商平台的物流管理系统

文章目录 引言一、物流管理系统的功能与架构1.1 物流管理系统在电商平台中的作用概述保障订单的及时配送优化库存管理控制运营成本提升客户服务水平支持数据驱动的决策应对市场变化 1.2 订单处理功能分析自动化处理流程订单分配与履行错误检测与处理机制实时订单状态更新订单数…

群晖配置FTP服务结合内网穿透实现公网访问本地NAS中储存文件

文章目录 1. 群晖安装Cpolar2. 创建FTP公网地址3. 开启群晖FTP服务4. 群晖FTP远程连接5. 固定FTP公网地址6. 固定FTP地址连接 本文主要介绍如何在群晖NAS中开启FTP服务并结合cpolar内网穿透工具,实现使用固定公网地址远程访问群晖FTP服务实现文件上传下载。 Cpolar内…

微信小程序开发学习笔记——4.7 api中navigate路由接口与组件的关系

>>跟着b站up主“咸虾米_”学习微信小程序开发中&#xff0c;把学习记录存到这方便后续查找。 一、跳转 1、方法一&#xff1a;组件 组件-导航-navigator <navigator url"/pages/demo/demo?id123" open-type"reLaunch">go demo page <…

windows搭建ftp实现局域网共享文件

一、开启ftp服务 1.使用 win Q 键&#xff0c;快捷打开搜索框 2.搜索框内搜索 “控制面板” 3. 进入控制面板内选择 ”程序“ 4. 单击进入 “启用或关闭windows功能” 5. 找到并展开“internet information services”、 6. 建议展开后全选 “FTP服务器” 和 “web管理工…

Mysql的MHA高可用集群部署及故障切换

目录 一、MHA概念 1、MHA的组成 2、MHA的特点 二、搭建MysqlMHA 1、实验思路 1.1 MHA架构 1.2 故障模拟 2、实验环境、安装包 3、服务搭建 3.1 所有服务器&#xff0c;关闭系统防火墙和安全机制 3.2 修改master &#xff08;192.168.170.111&#xff09;、slave1&am…

ATFX汇市:美国3月ISM制造业PMI为50.3,远高于前值47.8,经济景气度高

ATFX汇市&#xff1a;虽然国际市场的主流预期是美联储将于今年六月份开启首次降息&#xff0c;但降息的前提条件——美国经济显著衰退——似乎远未到来。此前公布的美国非农就业报告显示&#xff0c;新增非农就业人口27.5万人&#xff0c;处于近12个月的数据峰值水平&#xff1…

Modbus转Profinet网关解决主从设备间通信数据丢失难题

在接到现场关于Modbus转Profinet网关&#xff08;XD-MDPN100&#xff09;配置时出现信不稳定或数据丢失的问题的反馈后。对于现场反馈的Modbus转Profinet网关配置问题&#xff0c;特出专项答疑。 解决Modbus转Profinet网关&#xff08;XD-MDPN100&#xff09;通信不稳定或数据丢…

ddres( ) 组站星双差方程和设计矩阵

1 ddres( )参数介绍 rtklib中进行的单频解算 双差观测值&#xff0c;单差的模糊度 单频点双差 DD (double-differenced) phase/code residuals ------------------------------ x 模糊度 P 方差-协方差阵 sat 共识卫星列表 ns 共识卫星数量 y…

CLIP 图文检索,相似度计算

CLIP 是OpenAI提出的神经网络&#xff0c;它可以从自然语言监督中有效地学习视觉概念。 CLIP 可以应用于任何视觉分类基准&#xff0c;只需提供要识别的视觉类别的名称&#xff0c;类似于 GPT-2 和 GPT-3 的“零样本”功能。 相关paper 用法可以参考github 这里举几个使用CLI…

context switch的切换过程(TTBR0的切换/ASID的介绍)

快速链接: 【精选】ARMv8/ARMv9架构入门到精通-[目录] &#x1f448;&#x1f448;&#x1f448; context switch的切换 操作系统中可能存在多个任务&#xff0c; 内核调度器周期性地将执行从一项任务转移到另一项任务。在这个过程中&#xff0c;操作系统会保存上一个进程的执…

ISELED-演示项目代码

目录 一、main函数二、点灯函数 一、main函数 int main(void) {/* Write your local variable definition here */iseledInitType.crcEnable 1;iseledInitType.firstLedAdr 1;iseledInitType.tempCmpEnable 0;iseledInitType.voltSwing 0;/*** End of Processor Expert in…

windows下通过vscode访问ubuntu(绝大部分Linux下开发所采用的方案)

前言 本篇博客是介绍VSCode远程连接Ubuntu进行开发的解决方案&#xff0c;前提是安装好了VMWare&#xff0c;Ubuntu&#xff0c;windows下的VSCode。 嵌入式驱动学习专栏将详细记录博主学习驱动的详细过程&#xff0c;未来预计四个月将高强度更新本专栏&#xff0c;喜欢的可以关…

大模型prompt技巧——思维链(Chain-of-Thought)

1、Zero-shot、One-shot、Few-shot 与fintune prompt的时候给出例子答案&#xff0c;然后再让模型回答。 2、zero-shot-CoT “Let’s think step by step”有奇迹效果 3、多数投票提高CoT性能——自洽性&#xff08;Self-consistency&#xff09; 多个思维链&#xff0c;然后取…

使用Thymeleaf配置国际化页面

在国际化&#xff08;i18n&#xff0c;即 Internationalization 的缩写&#xff0c;其中“i”和“n”之间有18个字母&#xff09;的上下文中&#xff0c;Thymeleaf 和 Spring Boot 可以很容易地一起工作&#xff0c;以支持多种语言的页面显示。下面是如何在 Spring Boot 应用中…

干货教程【AI篇】| AI大模型文字生成视频环境部署小白级教程

只需要一个主题、一个词语&#xff0c;或者一段描述&#xff0c;就可以生成一个完整的短视频的工具来啦&#xff01; 在文章下方公众号中回复关键词【aivd】即可获取完整代码和配套软件 工具获取 ps&#xff1a;本文不涉及任何代码开发工作&#xff0c;仅仅作为软件推荐。 如…

实验:基于Red Hat Enterprise Linux系统的创建磁盘和磁盘分区(二、三)

目录 一. 实验目的 二. 实验内容 三. 实验设计描述及实验结果 实验二&#xff1a; 1. 为nvme0n2p1设备建立配额属性和文件(EXT) 2. 要求自己名字的用户只能存储不超过200M的文件&#xff0c;总数量不能大于10个 quotacheck [选项] 文件系统 edquota quotaon [选项] 文件系…

java数据结构与算法刷题-----LeetCode127. 单词接龙

java数据结构与算法刷题目录&#xff08;剑指Offer、LeetCode、ACM&#xff09;-----主目录-----持续更新(进不去说明我没写完)&#xff1a;https://blog.csdn.net/grd_java/article/details/123063846 文章目录 广度优先双分裂蛇 广度优先双分裂蛇 解题思路&#xff1a;时间复…

monitor link 联合smart link配合应对复杂的网络

monitor link关键词&#xff1a;上行和下行端口&#xff0c;当上行端口异常&#xff0c;下行端口立即down掉&#xff0c;也就是一种联动机制 如果上行端口里面是smart link方式&#xff0c;则当主从端口都出问题时候&#xff0c;下行端口才会down掉 monitor link 配置步骤 1创…

剑指Offer题目笔记24(集合的组合、排序)

面试题79&#xff1a; 问题&#xff1a; ​ 输入一个不含重复数字的数据集合&#xff0c;找出它的所有子集。 解决方案&#xff1a; ​ 使用回溯法。子集就是从一个集合中选出若干元素。如果集合中包含n个元素&#xff0c;那么生成子集可以分为n步&#xff0c;每一步从集合中…