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

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

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.mzph.cn/pingmian/13790.shtml

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

相关文章

jinkens打包前端依赖下载失败怎么办

不知道有没有小伙伴遇见这种问题,项目在本地可以正常下载、运行打包,但在jinkens上就不行了,配置了几种镜像也还是不行,这要如何解决呢? 那就只能去到jinkens配置的工作空间那里,找到对应的项目 &#xff…

总结优秀的prompt案例,学习更有效的prompt提示词工程写法,值得收藏

Prompt 提示词工程大多数人都在用,而且都会用,但是不一定写的好?很多人都在想怎么写好,更能满足自己的业务需求,或者实际场景。 我最近工作中也写了很多的prompt,像zero-shot、few-shot、COT这些都尝试过、…

FSC认证是什么?森林认证的好处是什么?

FSC认证(Forest Stewardship Council,森林管理委员会认证)是一种运用市场机制来促进森林可持续经营,实现生态、社会和经济目标的工具。以下是关于FSC认证的详细介绍: 一、FSC认证包括两个方面: 森林经营认…

乡村振兴与农业现代化:以现代农业科技为引领,提升农业综合生产能力,打造高产高效、生态安全的美丽乡村

目录 一、引言 二、现代农业科技在乡村振兴中的作用 (一)提高农业生产效率 (二)促进农业产业升级 (三)改善农村生态环境 三、提升农业综合生产能力的途径 (一)加强农业科技研…

Diffusion Policy:基于扩散模型的机器人动作生成策略

项目地址: Diffusion Policy (columbia.edu) 一、摘要 本文介绍了 "扩散策略",这是一种生成机器人行为的新方法,它将机器人的视觉运动策略(visuomotor policy)表示为条件去噪扩散过程(conditi…

添加、修改和删除列表元素

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 添加、修改和删除列表元素也称为更新列表。在实际开发时,经常需要对列表进行更新。下面我们介绍如何实现列表元素的添加、修改和删除。 …

如何使用Matlab进行三角剖分(自定义函数实现delaunayTriangulation 使用Bowyer-Watson 算法)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 目录 前言 一、Delaunay三角形 二、使用步骤 1.Bowyer-Watson算法 2.算法步骤 三、动画演示 四、核心代码 五、对比matlab自带函数和我们的算法: 总结 前…

谷歌开源项目BERT源码解读与应用实例

数据及代码见文末 基于BERT的中文情感分析实战:基于BERT的中文情感分析实战-CSDN博客 基于BERT的中文命名实体识别识别实战:基于BERT的中文命名实体识别识别实战-CSDN博客 1.项目配置文件 GLUE/BERT_BASE_DIR是项目的预训练权重,预训练权重主要包含3个部分:参数配置文件…

打气球小游戏

1.气球往上飘 我们声明两个符号常量来作为窗体的长和宽,接着就是常规操作 #define WINDOW_WIDTH 800 #define WINDOW_HEIGHT 600#include<easyx.h> #include<stdio.h> int main() {initgraph(WINDOW_WIDTH, WINDOW_HEIGHT);setbkcolor(WHITE);cleardevice();get…

python+selenium - UI自动框架之封装浏览器引擎driver方法

在做兼容性测试的适合&#xff0c;可以运行指定的浏览器&#xff08;IE,Chrome,Edge&#xff09; 目录文件&#xff1a; from selenium import webdriver from urllib3.exceptions import ProtocolError from common.log import *def getDriver():# if browserType is None:br…

模拟面试题

1.装箱和拆箱是指什么&#xff1f; 装箱——把栈中内容迁移到堆中去&#xff08;值转引用&#xff09; 拆箱——把堆中内容迁移到栈中去&#xff08;引用转值&#xff09; 2.值和引用类型在变量赋值时的区别是什么&#xff1f; 值类型&#xff1a;赋值时复制数据本身&a…

Gitee在已有项目基础上创建仓库中遇到的问题和解决

问题一&#xff1a;fatal: remote origin already exists 解释&#xff1a;当前仓库添加了一个名为"origin"的远程仓库配置&#xff0c;此时输入 git remote add origin https://xxx就会提示上面的内容。 解决方案1:移除旧的origin git remote remove origin 解决方案…

C++——mapset红黑树

目录 一补充知识 1关联式容器 2键值对 二set 1set的介绍 2set的使用 三map 1map的说明 2map的使用 四容器在oj中的使用 五AVL树 1概念 2插入 3AVL的旋转 3.1右单旋 3.2左单旋 3.3左右双旋 3.4右左双旋 4判断AVL树是否平衡 完整源代码 六红黑树 1概念 2性…

紫光展锐突破创新终端品类,搭载展锐芯的全球首款二合一5G云电脑正式发布

近日&#xff0c;搭载紫光展锐5G芯片T760的中兴云电脑逍遥系列正式发布&#xff0c;亮点&#xff1a; 全球首款二合一5G云电脑&#xff0c;支持本地/云端双模式&#xff0c;一键切换&#xff0c;用户可同时享有Android平板和Windows云电脑两种形态&#xff1b;支持5G蜂窝网络&…

C++相关概念和易错语法(13)(string的模拟实现)

string由于存在字符串和单字符的概念&#xff0c;使得它的一些接口&#xff0c;实现要比vector多一些。本质上来看string的实现是在顺序表的基础上加入串相关的操作。下面我会分享如何模拟实现string&#xff0c;这可以进一步提高我们对string的熟练程度。 1.构造函数、拷贝构…

附代码:策略常用-正余弦优化算法

正余弦优化算法作为群智能优化算法的一种, 正弦余弦算法 (sine cosine algorithm, SCA) 是 2016 年由 Mirjalili 提出的一种新型仿自然优化算法, 通过创建多个随机候选解, 利用正余弦函数的数学性质来平衡算法在搜系过程中的全局探索和局部开发能力。该算法具有结构简单、参数少…

docker三种自定义网络(虚拟网络) overlay实现原理

docker提供了三种自定义网络驱动&#xff1a;bridge、overlay、macvlan。 bridge驱动类似默认的bridge网络模式。 overlay和macvlan是用于创建跨主机网络。 支持自定义网段、网关&#xff0c;docker network create --subnet 172.77.0.0/24 --gateway 172.77.0.1 my_n…

PPT大珩助手新功能-生成迷宫

大珩助手是一款功能丰富的办公软件插件&#xff0c;它主要分为两个版本&#xff1a;PPT大珩助手和Word大珩助手。这两个版本都旨在提高用户在处理演示文稿和文档时的效率。 PPT大珩助手 这是一款专门为Microsoft PowerPoint设计的插件。它提供了多种功能&#xff0c;例如素材…

盲人社区生活支持体系:织就一张温暖的网

在当今社会&#xff0c;构建一个全面、包容的盲人社区生活支持体系成为了推动社会进步、保障残障人士权益的重要议题。随着科技的不断革新&#xff0c;一款名为“蝙蝠避障”的辅助软件走进了盲人的日常生活&#xff0c;它如同一位无形的向导&#xff0c;通过实时避障与拍照识别…

element DatePicker 日期选择器设置禁用未来日期,时间范围为60天

需要用到 DatePicker 里面的 picker-options 方法 disabledDate onPick方法 <el-date-pickerv-model"form.xxxx"type"daterange"value-format"yyyy-MM-dd":clearable"false":picker-options"pickerOptions"start-placeho…