兆原数通基于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…

Django使用Celery实现异步和定时任务功能

1、装库 celery==4.4.2 django-celery-beat==2.2.0 django-celery-results==2.0.12、添加应用 安装完依赖之后,把上面的两个应用添加到Django配置文件settings.py的INSTALLED_APPS里面: 添加celery配置信息 在项目的配置文件中添加如下配置信息,具体的配置作用见注释 I…

YOLOv5/v7 应用轻量级通用上采样算子CARAFE

1. 介绍 CARAFE(Content-Aware ReAssembly of FEatures)是一种轻量级的通用上采样算子,它可以用于提高卷积神经网络(CNN)中特征图的分辨率。CARAFE 的特点是计算量小、参数少、易于实现,因此非常适合用于移…

开放重定向漏洞

开放重定向漏洞 1.开放重定向漏洞概述2.攻击场景:开放重定向上传 svg 文件3.常见的注入参数 1.开放重定向漏洞概述 开放重定向漏洞(Open Redirect)是指Web应用程序接受用户提供的输入(通常是URL参数),并将…

代码随想录算法训练营第四十五天|139.单词拆分

139.单词拆分 这题首先肯定是排序问题而不是组合问题,因为单词的顺序是一定的,所以组成单词的字符串顺序也是一定的。所以应该先循环背包容量,再循环物品个数。 背包容量就是s字符串,物品就是数组中的单词,字符串的循…

Kubernetes 文档 / 概念 / 工作负载 / Pod / Init 容器

Kubernetes 文档 / 概念 / 工作负载 / Pod / Init 容器 此文档从 Kubernetes 官网摘录 中文地址 英文地址 本页提供了 Init 容器的概览。Init 容器是一种特殊容器,在 Pod 内的应用容器启动之前运行。Init 容器可以包括一些应用镜像中不存在的实用工具和安装脚本。…

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

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

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

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

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

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

spring中依赖注入(DI)是什么?

好的,让我以尽可能通俗易懂的方式来解释什么是依赖注入(DI,Dependency Injection)。 假设你正在制作一款游戏,游戏中有个角色需要使用武器。在没有依赖注入的情况下,这个角色可能需要自己创建一个武器。这…

计算理论基础:4、复杂性理论

复杂性理论 c e n t e r p r o b l e m : P ≠ N P center\ \ problem:P \ne NP center problem:PNP 1.P、EXP、NP 定义1 D T I M E DTIME DTIME ​ T : N → N T:\N\rightarrow \N T:N→N,语言 L ∈ D T I M E ( T ( n ) ) L\in DTIME(T(n)) L∈DTIME(T(n)),当且仅当存…

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

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

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

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

TypeScript进阶 类型演算与高级内置类型

简介: TypeScript 是一种静态类型检查的 JavaScript 超集,它通过类型注解和类型推断来提供更强大的类型系统。在 TypeScript 中,类型演算是一种重要的概念,它允许我们在编译时对类型进行操作和计算。本文将深入探讨 TypeScript 类…

如何使用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…

网关过滤器使用及其原理分析

1.网关过滤器介绍 网关过滤器的用途一般是修改请求或响应信息,例如编解码、Token验证、流量复制等 官方文档地址:Spring Cloud Gateway 网关过滤器分为GloablFilter、GatewayFilter及DefaultFilter 过滤器的执行顺序由Order决定,Order值越小,优先级越高,越先执行 1.1…

vmware 安装系统提示无法启用3D加速的解决

起因&#xff1a;朋友要在虚拟机打游戏&#xff0c;然后就叫我帮忙搞虚拟机&#xff0c;安装的是当前最新的17.1.5 Pro。 说说他老母鸡的情况&#xff1a;i7 10th 32G 显卡1060&#xff0c;这个配置呢&#xff0c;开启虚拟机3D是正常没问题的。因为我的显卡也是这个。本地的显…

linux platform 总线(设备树)驱动

使用文档 设备树修改 新增一个 LED 节点 arch/arm/boot/dts/arm/vexpress-v2p-ca9.dts my_pl_led {compatible "arm, cortex-a9-led";status "okay";};设备树编译 make dtbs日志 DTC arch/arm/boot/dts/arm/vexpress-v2p-ca9.dtbplatform driver …