兆原数通基于Apache SeaTunnel的探索实践

news2024/11/19 5:36:37

随着大数据技术的不断发展,数据同步工具在企业中的应用变得愈发重要。为了满足复杂多样的业务需求,找到一款高效、灵活的数据同步工具变得尤为关键。

file

在这篇文章中,我们将分享兆原数通研发经理李洪军对Apache SeaTunnel的选择、应用及经验。这些实际应用经验将为新用户提供宝贵的参考,帮助大家更好地理解和使用SeaTunnel。

为什么选择SeaTunnel

在调研数据同步工具时,我们最初选择了DataX,并使用了两三年。然而,随着业务需求的增加,我们发现了一些问题。例如,DataX只支持单机部署,不支持集群。此外,虽然DataX支持常见的数据库如Oracle和PG,但对于一些不支持upsert的情况,以及用户特定的使用场景,DataX无法满足我们的要求。这些问题促使我们重新启动调研并选择新的数据同步工具。

经过一番研究,我们在GitHub上发现了Apache SeaTunnel项目。SeaTunnel不仅满足了我们对高可用性、upsert支持以及任务暂停功能的需求,而且其配置也比DataX简单。此外,SeaTunnel的扩展性和社区活跃度都非常高。

从调研到测试再到上线,我们大约花了2-3个月时间。当时测试的是2.3.3版本,使用后感觉不错。目前我们已经从DataX迁移到SeaTunnel,并升级到了最新的2.3.4版本。

SeaTunnel 解决了什么问题?

大家先看下面这个流程图,最开始我们使用 DataX。上层是 Web 页面,通过调度引擎(之前用的是 XXL-Job),通过 Web 页面组装,把源数据采集过来后,获取源数据的 Java 类型,通过页面配置表,输入作为源端,输出作为目标端,中间可能会有一些转换操作。

file

通过页面化、图形化、拖拽的形式组装好后,把数据发给调度引擎,调度引擎动态生成一个 DataX 模板,然后在底层执行。迁移到 Apache SeaTunnel 后,流程基本未变,只是基于 SeaTunnel 重新设计了 Web 页面风格。

另外,调度方面我们替换使用了 Apache DolphinScheduler。海豚调度支持很多主键,如常规的 Shell、SQL 节点、依赖节点、Hive,以及市面上常见的数据同步工具的调度。所以我们把 XXL-Job 换掉了。

最终架构是通过页面组装参数,组装好后发给调度中心进行调度执行,最后调度中心有自己的监控来传递到底层。

有什么经验可以分享?

我们使用这套架构的原因

我们现在所做的主要工作是通过 Web 页面进行数据集成和同步。我们通过拖拉拽操作,把数据源和目标端的信息传递到底层。例如,传递源端表和目标端表的名称,然后基于自动建表和源数据的 Java 类型生成表结构。我们利用 FreeMarker 模板,将 source、sink 和 transform 组件,包括 JDBC 和 Hive 等组装成对象,再动态生成 SeaTunnel 所需的配置文件。底层通过 Apache DolphinScheduler 调度和执行命令行任务。

在数据同步过程中,我们重点关注同步性能和易用性。任务的状态和性能指标通过改进的 DolphinScheduler 进行监控和收集,并将这些信息发送到 Kafka 消息队列中。通过我们的告警中心,对任务的成功或失败进行告警,监控任务类型并处理性能瓶颈。日志中的读写效率通过接口获取并展示在页面上,包括实时进度和曲线图。

在性能测试方面,我们发现从 TDSQL 到 Kafka 的数据同步速度约为每秒 9-10 万条记录,处理大约 3 亿条数据。从 TDSQL 到 OSS 的速度有时能达到每秒 20 万条记录。通过这些测试,我们确保了 SeaTunnel 的高效性能。

性能问题怎么定位?

在关注社区并参与多个用户群后,我发现许多人会问关于性能的问题,比如为什么速度很慢。面对性能问题你要去定位的时候,我们通常分两种情况:一种是读取源端数据的性能慢,另一种是数据加载的性能慢。

对于读取和写入都慢的情况,例如从 TDSQL 到 TDSQL,我们可以先将数据落地成文件,因为写入文件通常比写入数据库快。这样可以先判断从 TDSQL 到文件的读取性能,再检查文件到 TDSQL 的写入性能,以确定是读取慢还是写入慢。

另外,对于 HBase 的写入,我们注意到以 put 形式写入较慢,而使用 bulkload 方式写入会更快。在定位同步性能问题时,首先要区分是读取慢还是写入慢。我们可以使用 console sink 来测试读取的纯读性能,再测试写入性能。因为在 CTR(读取和写入)过程中,如果写入慢,读取也会变慢,因此通过任务监控难以判断具体是读慢还是写慢。我们需要借助测试工具如本地文件或 console sink 来判断性能。

怎么解决遇到的问题?

最容易碰到的坑就是JAR包冲突,尤其是数据库版本不兼容时选择驱动的问题。

对熟悉SeaTunnel的小伙伴来说,使用Zeta引擎时,lab目录下会包含Hadoop、Hive的包和数据库驱动,这些包容易冲突。我们有一个新的filter功能,为所有连接器提供严格的class load隔离。之前,Hadoop的假包没有隔离,导致使用Hive或Hadoop时冲突。这个功能完成后,每个连接器将有独立的包目录,引擎的Hadoop包也会独立存放。这将允许在同一作业或集群中支持不同版本的Hive、Hadoop和数据库。

这个功能计划在2.4版本中推出,预计会带来较大改动。当前版本是2.3,因此相关改动会在2.4中实现。

对于刚开始使用SeaTunnel的新用户,您有什么建议?

对于刚开始使用SeaTunnel的用户,以下是我的经验,希望能够帮助大家少走一些弯路:

阅读官方文档:首先要详细阅读官方文档,了解基本配置和使用方法。官方文档通常会提供详细的安装、配置和操作指南,是入门的最佳资料。 下载并运行官方压缩包:对于不想立即接触源码的用户,可以先下载官方提供的压缩包,放在服务器上运行,熟悉基本的操作流程和SeaTunnel的运行机制。 深入了解源码:如果希望深入了解SeaTunnel的工作原理,可以将源码拉下来,查看配置文件,运行并调试源码,理解各个节点的运行和数据流向。 调整配置和源码:在运行过程中,如果发现某些功能不满足需求,可以通过调整配置文件或修改源码来实现。例如,有时可能需要处理一些映射关系未匹配的字段,这时可以通过修改源码来解决问题。 梳理源码流程:在学习过程中,建议梳理一些源码的流程图,以便更好地理解SeaTunnel的内部逻辑和关键字的实现。例如,搜索特定的关键字(如“拆片”)来定位相关类和方法,有助于更高效地进行源码研究和修改。 这些建议能够帮助新用户快速上手SeaTunnel,并在遇到问题时更有条理地进行解决。希望大家能够顺利使用SeaTunnel,提高工作效率。

如何快速学习?

在学习和使用 SeaTunnel 时,以下方法和资源能够帮助大家更高效地掌握该工具:

利用 Example 进行调试

Example 是 SeaTunnel 学习和调试的关键资源。几乎所有的连接器和作业都可以在 Example 中运行,特别是需要云环境的部分,如果已经准备好了云环境,也可以在 Example 中调试。这可以帮助我们熟悉并打通整个流程。

E2E 模块的重要性

SeaTunnel 的代码中有 E2E 模块,这个模块包含了所有连接器的使用方法,并提供了详细的测试用例。通过查看和运行 E2E 模块中的测试用例,可以更全面地了解各个连接器的用法和流程。

学习路径和参考资料

官方文档:阅读官方文档,了解各种示例和参数配置。官方文档会从 2.3.5 版本开始提供中文档,虽然初期可能不全,但会逐步完善。

  • 必填参数:在配置时,先关注必填参数,非必填参数通常有默认值,可以不填。
  • 本地调试:使用 Docker 在本地运行 E2E 测试,方便快速上手。
  • 社区和贡献:也希望社区用户和贡献者共同完善文档,以帮助更多新用户更快地了解和使用 SeaTunnel。

通过 Example 和 E2E 模块,结合官方文档和社区资源,可以高效地学习和使用 SeaTunnel。希望这些建议能帮助大家少走弯路,更快地掌握这款工具。

使用SeaTunnel对您个人技术成长有什么影响?

有的,像之前我们自己可能也没有参与这种很深的架构,通过深入了解 SeaTunnel 的架构,特别是像 Hazelcast 这种分布式存储和任务调度技术,可以提升对分布式系统的理解和应用能力。

此外,SeaTunnel 的读写插件和传输功能,采用了 SPI 和 auto service 等技术,这些在日常公司编码中不常遇见的技术,对拓展知识面和提升技能有很大帮助。总的来说,SeaTunnel 不仅提高了技术经验,还扩展了知识广度,为个人职业发展提供了有力支持。

社区有支持bulkload计划?

目前我们使用 Hive 写入时是以 put 形式进行的,这种方式性能较慢。我看到有用户在社区提到是否可以支持 bulkload 计划,不知道社区是否有相关计划。之前有一位贡献者跟我讨论过这个问题,但我不太清楚后续进展。如果社区没有计划支持 bulkload,我们打算先自行实现,然后再贡献给社区。

如何改列名?

在使用 HBase 读取数据时,列名中有冒号会引发转换问题。通常我们通过 transform 处理列名。例如,可以在 transform 中添加规则,将列名中的特定字符替换为其他字符。当前我们确实通过这种方式实现了对列名的修改,即截取冒号前后的部分。

高老师:我们可以进一步讨论这个解决方案,建议创建一个 issue 或发送邮件,详细描述你的方案设计,看看是否能够合并到主分支。

hazelcast 有没有什么工具可以看到底层执行的东西,具体存取动作?

我这里有个问题,关于以前使用的 Hazelcast,感觉门槛比较高。有没有什么方便的工具可以查看引擎内存储的内容?

实际上,我们使用 Hazelcast 主要有三个目的:

集群管理能力:Hazelcast 提供了强大的集群管理功能。 RPC 通信能力:利用 Hazelcast 实现集群节点间的 RPC 通信。 分布式内存网格:将集群的状态、监控数据和运行时状态存储在 Hazelcast 的分布式内存网格中,这相当于替代了 Zookeeper。 通过 Hazelcast 的 message 模块,可以清晰查看当前集群的节点信息、底层的 IMAP 列表、IMAP 中存储的数据量、请求频次及响应时长等。

推荐使用 Hazelcast Manager,尽管它不是开源的,但其部署和配置都很简单,可以方便地查看和管理 Hazelcast 内部信息。

此外,Hazelcast 提供了接口,通过这些接口可以获取详细的监控信息。如果需要自定义界面或集成第三方监控工具,可以使用 Hazelcast 的 JMX 接口;若想使用现成的工具,可以直接使用 Hazelcast Manager。

总之,Apache SeaTunnel不仅解决了我们在数据同步过程中遇到的诸多问题,还大大提升了我们的工作效率。通过分享兆原数通的实际应用经验,希望能够帮助更多的用户更好地理解和使用SeaTunnel,推动开源数据同步工具在更多场景中的应用。感谢每一位为SeaTunnel做出贡献的开发者和用户,让我们共同努力,让SeaTunnel变得更好!

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

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

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

相关文章

每日一题——博弈论(枚举与暴力)

博弈论 题目描述 运行代码 #include<iostream> #include<vector> using namespace std; int main(){int n;cin >> n;vector<int> d(n,0);for(int i 0;i < n;i){cin >> d[i];}vector<int> in(1000,0);for(int k 1;k<3;k){for(int…

【实战JVM】-基础篇-02-类的声明周期-加载器

【实战JVM】-基础篇-02-类的声明周期-加载器 3 类的生命周期3.1 生命周期的概述3.2 加载阶段3.2.1 查看内存中的对象 3.3 连接阶段3.3.1 验证阶段3.3.1.1 验证是否符合jvm规范3.3.1.2 元信息验证3.3.1.3 验证语义3.3.1.4 符号引用验证 3.3.2 准备阶段3.3.3 解析阶段 3.4 初始化…

从一个时间序列数据中生成一个Markov Transition Field (MTF)

Markov Transition Field&#xff08;马尔科夫转移场&#xff0c;简称MTF&#xff09;是一个用来表示时间序列数据中不同时间点之间状态转移概率的可视化工具。简单来说&#xff0c;它展示了一个时间点上的状态如何可能转移到另一个时间点的状态&#xff0c;这些转移概率是通过…

C语言指针相关知识(第五篇章)(非常详细版)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、sizeof和strlen对比二、数组之间的比较&#xff08;依据strlen和sizeof来呈现&#xff09;&#xff08;一&#xff09;、一维整型数组&#xff08;二&#…

着急联系媒体投稿发表文章有什么好方法?

作为一名曾经的信息宣传员,我深知在紧张的宣传节点上,急于将精心撰写的文章推向更广阔的读者群体,那种紧迫感和焦虑几乎成了常态。记得那段时间,为了能让稿件得到及时有效的曝光,我不得不亲自踏上了一场寻找媒体联系方式的“马拉松”。那时,我手头的资源有限,仅有的几个联系方式…

学 Java 具体能干什么?

学习 Java 后&#xff0c;你可以从事许多不同的工作和项目&#xff0c;涵盖了广泛的应用领域。以下是一些具体的应用场景和工作方向&#xff1a; 1. 企业级应用开发 Java 是企业级应用开发的首选语言之一&#xff0c;特别适合开发大规模、分布式、多层次的企业应用程序。 Jav…

创建列表的艺术:三种实用方法全解析

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一、基础篇&#xff1a;直接使用中括号创建列表 1. 创建空列表 2. 创建包含元素的列表 二…

【经典文献】光-声立体成像:关于系统标定与三维目标重建

论文名称&#xff1a;《Opti-Acoustic Stereo Imaging: On System Calibration and 3-D Target Reconstruction》作者列表&#xff1a;Shahriar Negahdaripour, Hicham Sekkati, and Hamed Pirsiavash作者单位&#xff1a;美国迈阿密大学电气与计算机工程系&#xff0c;佛罗里达…

sourcetree推送到git上面

官网&#xff1a;Sourcetree | Free Git GUI for Mac and Windows 下载到1次提交 下载后打开 点击跳过 下一步 名字邮箱 点击clone 把自己要上传的代码粘贴到里面去 返回点击远程->点击暂存所有 加载完毕后&#xff0c;输入提交内容提交 提交完成了 2次提交 把文件夹内的…

iOS 17.5 release notes

文章目录 iOS 17.5 更新恢复了多年前删除的一些图片新增彩虹壁纸欧盟用户可直接从网站下载应用新增了追踪通知改进 Apple News图书应用"阅读目标"设计更新颜色匹配的播客小部件Web浏览器安全权限的访问下一代“Beats Pill”扬声器在iOS 17.5代码中得到确认店内Vision…

面试被问到不懂的东西,是直接说不懂还是坚持狡辩一下?

大家好&#xff0c;我是瑶琴呀。 面试被问到不懂的东西&#xff0c;是直接说不懂还是坚持狡辩一下&#xff1f;这个问题可以转变一下&#xff0c;如果你顺利拿到 offer&#xff0c;公司安排的工作跟你之前的技术和经验不匹配&#xff0c;你还愿意干下去吗&#xff1f; 转变一…

基于Vue+SpirngBoot的博客管理平台的设计与实现(论文+源码)_kaic

摘 要 随着当下社会的发展&#xff0c;互联网已经成为时代的主流&#xff0c;从此进入了互联网时代&#xff0c;对大部分人来说&#xff0c;互联网在日常生活中的应用是越来越频繁&#xff0c;大家都在互联网当中互相交流、学习、娱乐。博客正是扮演这样一个角色。博客已成为当…

Docker 安装kingbase V8r6

下载 官网下载&#xff0c;注意&#xff1a;这里下载 Docker 版本v8r6 安装 # 导入镜像 docker load -i kingbase.tar# 重命名 docker tag [image-name]:[tag] [new-image-name]:[new-tag]# 删除 docker rmi [image-name]:[tag]# 创建容器 docker run -tid \ --privileged \…

计算机毕业设计 | SpringBoot招投标 任务发布网站(附源码)

1&#xff0c;绪论 在市场范围内&#xff0c;任务发布网站很受欢迎&#xff0c;有很多开发者以及其他领域的牛人&#xff0c;更倾向于选择工作时间、工作场景更自由的零工市场寻求零散单子来补贴家用。 如今市场上&#xff0c;任务发布网站鱼龙混杂&#xff0c;用户需要找一个…

使用大模型结合Mermaid实现业务流程图快速生成

一、需求描述 在日常系统研发过程中&#xff0c;经常面临前期要写投标技术文档&#xff0c;中期要写系统概要设计、详细设计等各类文档&#xff0c;最耗时间的便是画一些业务流程图。随着大模型的不断普及&#xff0c;大模型对文字的处理越来越强&#xff0c;现可以找一个能简化…

pycharm连接阿里云服务器过程记录

因为不想用自己的电脑安装anaconda环境,所以去查了一下怎么用服务器跑代码,试着用pycharm连接阿里云服务器,参考了很多博客,自己简单配置了一下,记录一下目前完成的流程. 主要是:阿里云服务器的远程登录和安装anaconda,以及怎么用pycharm连接阿里云服务器上的解释器. 小白刚开始…

Python 渗透测试:电子邮件 || Redis || FTP || SSH || MySQL 集成爆破工具.

集成爆破工具. 集合爆破里面包含了&#xff1a;电子邮件爆破工具&#xff0c;Redis爆破工具&#xff0c;FTP爆破工具&#xff0c;SSH爆破工具&#xff0c;MySQL爆破工具。 目录&#xff1a; 集合爆破工具. 电子邮件 爆破工具&#xff1a; Redis 爆破工具&#xff1a; FTP …

元组推导式

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 使用元组推导式可以快速生成一个元组&#xff0c;它的表现形式和列表推导式类似&#xff0c;只是将列表推导式中的“[]”修改为“()”。例如&#xf…

Quartus Cyclone I II III IVE 器件型号

玩耍了一个 EP2 型号的开发板&#xff0c;发现 安装的quartus13 没有Cyclone II 型号&#xff0c;经过探索发现了是版本不对。 https://www.intel.com/content/www/us/en/software-kit/711920/intel-quartus-ii-subscription-edition-design-software-version-13-0sp1-for-win…

java欢迪迈手机商城设计与实现源码(springboot+vue+mysql)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的欢迪迈手机商城设计与实现。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 项目简介&#xff1a; 欢迪迈手机商城…