兆原数通基于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.mfbz.cn/a/647726.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

蓝桥杯物联网竞赛_STM32L071KBU6_关于size of函数产生的BUG

首先现象是我在用LORA发送信息的时候,左边显示长度是8而右边接收到的数据长度却是4 我以为是OLED显示屏坏了,又或者是我想搞创新用了const char* 类型强制转换数据的原因,结果发现都不是 void Function_SendMsg( unsigned char* data){unsi…

【代码随想录】动态规划经典题

前言 更详细的在大佬的代码随想录 (programmercarl.com) 本系列仅是简洁版笔记,为了之后方便观看 做题步骤 含义公式初始化顺序检查 确定dp数组以及下标的含义递推公式dp数组如何初始化遍历顺序打印dp数组(看哪里有问题) 斐波那契数 c…

高性能推理框架漫谈

传统模型分布式推理框架 Tensorflow servingPytorch ServingTriton Server 大语言模型的推理框架 其中, VLLM 后端接入了Ray 框架, 作为调度请求的分发处理;除此之外,还包括Nvidia 最新推出的TensorRT-LLM, 增加了对…

若依 ruoyi-vue 用户账号前后端参数校验密码 手机号 邮箱

前端 <el-dialog :title"title" :visible.sync"open" width"800px" append-to-body><el-form ref"form" :model"form" :rules"rules" label-width"120px"><el-row><el-col :span…

IOT技术怎么落地?以宝马,施耐德为例

物联网技术 物联网&#xff08;IoT&#xff09;技术正逐渐成为数字化工厂转型的核心驱动力。本文将通过实际案例&#xff0c;探讨IoT技术如何促进制造业的数字化转型&#xff0c;提高生产效率&#xff0c;降低成本&#xff0c;并提升产品质量。 1. 物联网技术简介 物联网技术通…

记录一次Netty的WSS异常

概述 业务场景 应用通过 WSS 客户端连接三方接口。在高并发压测时&#xff0c;出现了请求服务器写入失败的异常&#xff0c;该异常是偶发&#xff0c;出现的概率不到千分之一&#xff0c;异常如下图所示。 问题概述 注意&#xff1a; 因为握手是通过 http 协议进行的。所以…

SpringBoot整合WebSocket实现聊天室

1.简单的实现了聊天室功能&#xff0c;注意页面刷新后聊天记录不会保存&#xff0c;后端没有做消息的持久化 2.后端用户的识别只简单使用Session用户的身份 0.依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-…

firewalld 防火墙

firewalld概述 Linux系统防火墙从CentOS7开始的默认防火墙工作在网络层&#xff0c;属于包过滤防火墙 Firewalld和iptables的关系 netfilter 位于Linux内核中的包过滤功能体系称为Linux防火墙的“内核态” firewalld Centos默认的管理防火墙规则的工具称为防火墙的“用…

高中数学:平面向量-题型总结及解题思路梳理

一、知识点及解题思路梳理 高中&#xff0c;2/3的向量题目是坐标向量题&#xff0c;1/3是几何向量题。但是&#xff0c;这1/3的几何向量题可以转换成坐标向量题。 二、练习 例题1 几何型向量题 例题2

QML的Image 路径问题(source)

四种路径格式 在 QML 中&#xff0c;当你使用 Image 元素的 source 属性来指定一个图片的路径时&#xff0c;有几种不同的方式可以指定这个路径&#xff0c;每种方式都有其特定的用途和上下文。 相对路径&#xff1a; QML 文件和一个名为 close.png 的图片在同一目录下&#x…

比较两列数据

点其中一个数据 删掉S&#xff0c;回车 大的标红

基于SpringBoot+Vue+Mysql的实验室低值易耗品管理系统

博主介绍&#xff1a; 大家好&#xff0c;本人精通Java、Python、C#、C、C编程语言&#xff0c;同时也熟练掌握微信小程序、Php和Android等技术&#xff0c;能够为大家提供全方位的技术支持和交流。 我有丰富的成品Java、Python、C#毕设项目经验&#xff0c;能够为学生提供各类…

基于springboot的毕业设计系统的开发源码

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

Git Core Lecture

1、Git 简介 官方介绍&#xff1a;Git is a fast distributed revision control system (Git 是一个快速的分布式版本控制系统) 2、Git Core Command 2.1 git init git 工程初始化&#xff0c;会在工作区 (working directory) 根目录中创建.git 目录 # 创建目录 $ mkdir git-i…

智能合约语言(eDSL)—— 并行化方案 2

这个并行算法最初其实是在aptos上实现的&#xff0c;aptos上使用的是move虚拟机&#xff0c;后来我把它移植到我们链上了&#xff0c;但是wasm虚拟机。还是费了不少事情。 目前evm并行也比较火&#xff0c;像monad&#xff0c;sei等。经过调研发现&#xff0c;其实evm的并行&am…

Python 获取当前IP地址(爬虫代理)

Python 获取当前IP地址&#xff08;爬虫代理&#xff09; 在Python中&#xff0c;获取当前的公网IP地址通常涉及到发送一个请求到外部服务&#xff0c;因为本地IP地址通常只在你的私有网络内部是可见的&#xff0c;而公网IP地址是由你的ISP&#xff08;互联网服务提供商&#x…

如何查看哪些组策略应用于你的电脑和用户帐户?这里有详细步骤

如果你希望在电脑上查看所有有效的组策略设置,以下是操作方法。 什么是Windows中的组策略 在Windows世界中,组策略为网络管理员提供了一种将特定设置分配给用户组或计算机组的方法。然后,无论何时组中的用户登录到联网的PC,或无论何时启动组中的PC,都会应用这些设置。 …

牛客NC222 插入区间【中等 数组,区间合并问题 Java/Go/PHP/C++】lintcode30 插入区间

题目 题目链接&#xff1a; https://www.nowcoder.com/practice/1d784b5472ab4dde88ea2331d16ee909 https://www.lintcode.com/problem/30/solution/56586 思路 Java代码 import java.util.*;/** public class Interval {* int start;* int end;* public Interval(int …

python web自动化(分布式测试Grid)

Grid介绍 Selenium Grid 是 Selenium 提供的⼀个⼯具&#xff0c;⽤于⽀持在多台计算机上并⾏运⾏测试。 它允许将测试分发到不同的机器和浏览器组合上&#xff0c;同时收集结果。 1.并⾏执⾏测试⽤例&#xff1a;在不同的机器上并⾏执⾏测试⽤例&#xff0c;从⽽加速整个测试过…

详细分析Element Plus中的ElMessageBox弹窗用法(附Demo及模版)

目录 前言1. 基本知识2. Demo3. 实战4. 模版 前言 由于需要在登录时&#xff0c;附上一些用户说明书的弹窗 对于ElMessageBox的基本知识详细了解 可通过官网了解基本的语法知识ElMessageBox官网基本知识 1. 基本知识 Element Plus 是一个基于 Vue 3 的组件库&#xff0c;其中…