中电信翼康工程师:我在 Apache SeaTunnel 社区的贡献之旅

news2024/11/26 12:18:31

贡献者Github ID:luckyLJY 文章整理:曾辉

Apache SeaTunnel 作为一款强大的数据同步和转换工具,凭借其部署易用性、容错机制、数据源支持、性能优势、功能丰富性以及活跃的社区支持,成为了数据工程师们不可或缺的利器。

因其具有的以下优良特性:

在数据源方面,支持多种传统数据库、以及现有流行的多数大数据存储;

数据同步方面,支持批流的数据同步方式,完美兼容离线同步、实时同步、全量同步、增量同步等实际应用场景;

其社区在技术更新上非常迅速,确保了中电信翼康能够及时获取技术支持与更新迭代。将其选型作为了数据集成主要技术。

SeaTunnel 不仅能够满足各种规模和类型的数据处理需求,为用户提供高效、稳定和灵活的数据处理解决方案。随着数据环境的不断演变和发展,SeaTunnel 将继续在数据同步和转换领域发挥领导作用,推动数据驱动的业务发展。

对于我们公司基于SeaTunnel的应用实践也可以参考这篇文章:https://mp.weixin.qq.com/s/SitGSc9iZYlH-nLpGR0AJw

在了解了 Apache SeaTunnel 的背景后,接下来我将分享如何快速参与其代码开发,完善功能。以自己首次贡献代码的经历为例,简述具体步骤。

代码环境搭建

  • 首先,在 SeaTunnel 的官方 GitHub 仓库地址:https://github.com/apache/seatunnel 进行 fork 操作,将代码仓库复制到自己的 GitHub 账户中。

  • 在本地使用 IDE(如 IntelliJ IDEA)克隆 fork 后的代码,并配置 Java 以及 Maven 仓库。

  • 编译拉取的代码,并确保代码格式化:

  • 编译构建项目:

  • 对编译打包完成的 SeaTunnel 代码进行测试:
    • 解压后的代码目录:

  • 启动服务端:

  • 提交测试案例:

  • 测试成功的环境如下:

这一步非常重要,它确保你拥有一个正确的开发环境,以便后续代码开发的顺利进行。

学习与实践 SeaTunnel 的工作流程

  • 官方提供的 SeaTunnel 工作流图:

通过该图我们可以看出,SeaTunnel 的工作流程包括:source(数据源)、transform(数据转换)、sink(数据目标),以及执行引擎。source 是数据的输入源,sink 是数据的输出目标,而 transform 则是将输入数据转换为目标数据的插件。SeaTunnel 支持多种执行引擎,包括其自带的 Zeta 引擎,以及 Flink 和 Spark。

  • 以 MySQL 到 MySQL 数据同步为例,以下是一个实际案例的 conf 配置文件:

    env {
      parallelism = 1
      job.mode = "BATCH"
    }
    
    source {
      jdbc {
        url = "jdbc:mysql://localhost:3306/test_his"
        driver = "com.mysql.cj.jdbc.Driver"
        user = "root"
        password = "123456"
        query = "select * from ods_jc_hzjbxxb;"
        properties {
          useSSL=false
          rewriteBatchedStatements=true
        }
      }
    }
    
    transform {
    }
    
    sink {
      jdbc {
        url = "jdbc:mysql://localhost:3306/api-server"
        driver = "com.mysql.cj.jdbc.Driver"
        user = "root"
        password = "123456"
        query = """insert into ods_jc_hzjbxxb (...) values (...);"""
        properties {
          useSSL=false
          rewriteBatchedStatements=true
        }
      }
    }
    

该配置实现了 MySQL 到 MySQL 的简单数据同步。请根据官方文档中的 connector-v2 示例,创建 JDBC 插件,并在 plugins/jdbc/lib 目录下放置 MySQL 连接器。然后重启 SeaTunnel 服务,将配置文件放在 config 目录下,并使用以下命令提交作业:

./bin/seatunnel.cmd --config ./config/mysql_jdbc.conf

通过日志可以验证数据同步是否成功,并在目标数据库中检查同步结果。

代码阅读

通过学习 SeaTunnel 的工作流程,主要调试 SeaTunnel 自带的Zeta引擎的执行过程,通过官方文档的阅读了解到 SeaTunnel 的作业运行模式有Local和集群模式,项目实际应用更多为集群模式,因此把调试集群的执行过程作为主要学习对象。

  • 服务端执行顺序的代码调试:

通过 server.execute() 方法查看服务端的执行流程:

通过代码调试的手段了解客户端启动的执行顺序

  • 通过命令行提交完会调用org.apache.seatunnel.core.starter.seatunnel.command.ClientExecuteCommand#execute方法
  • 调用org.apache.seatunnel.engine.client.job.ClientJobProxy#submitJob方法
  • 调用服务端的org.apache.seatunnel.engine.server.CoordinatorService#submitJob

尝试开发

  • 需求背景
    我们在公司开发 OpenGauss CDC 时,发现当前的 JDBC Sink 插件不直接支持 OpenGauss 数据库,而是通过 PostgreSQL JDBC Sink 来写入。

    实际使用中遇到了兼容性问题,因此我决定开发一个通过 OpenGauss 自带 JDBC 驱动进行连接的功能。

  • 代码实现
    通过阅读 JDBC 连接器的代码,我发现只需要在 seatunnel-connectors-v2/connector-jdbc 模块下实现 OpenGauss 的 Catalog 和 Dialect。

    • org.apache.seatunnel.connectors.seatunnel.jdbc.catalog 包下创建 OpenGauss 的 CatalogFactory,因其兼容 PostgreSQL,可继承 Postgres 的实现。
    • org.apache.seatunnel.connectors.seatunnel.jdbc.internal.dialect 包下实现 OpenGauss 的方言工厂,覆写 acceptsURL 方法以支持 OpenGauss 的连接。
  • e2e 测试代码编写
    编写 e2e 测试需要继承 AbstractJdbcIT 类,并实现相关的测试案例,如 initContainer 初始化容器,以及 getJdbcCase 配置容器信息。

最终,我通过 Git 提交代码至自己的仓库,并向 SeaTunnel 开源项目发起 Pull Request,随后关注流水线运行情况以及代码 review 的反馈,直到社区 PMC 合并代码。

不知道如何提PR的同学可以参考这篇文章:https://mp.weixin.qq.com/s/wOVxNjg-tSQeenUY5Sd7kQ

个人心得

通过这次亲身参与 Apache SeaTunnel 代码贡献与学习的经历,我深入了解了 SeaTunnel 的源码与架构设计。

这不仅拓宽了我的技术视野,也让我更加深刻地理解了其分布式数据处理架构。从用户到开发者和贡献者的身份转变,使我能够更精确地将 SeaTunnel 的功能与特性应用到具体的业务场景中。

特别是在处理 sourcesink 的众多配置参数时,我体会到从用户到开发者的角色转换所带来的优势。不再只是关注基本功能,而是深入理解这些配置背后的技术原理,使我能够灵活应对复杂的业务需求。

此次参与经历对我的技术成长有着重要影响,也激励我继续在开源社区中探索和贡献。

总结

通过参与 SeaTunnel 开源项目的部署、调试、阅读源码和尝试开发,我对开源项目的开发流程和规范有了更深的了解。同时,非常感谢 dailaizhangdonghao 两位大佬的知识分享与帮助!

如果你有参与开源社区的想法可以联系社区小助手:seatunnel1

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

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

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

相关文章

offset Explorer连接云服务上的kafka连接不上

以上配置后报连接错误时,可能是因为kafka的server.properties配置文件没配置好: 加上面两条配置,再次测试连接,成功 listeners和advertised.listeners

使用Python来下一场雪

具体效果:(大雪缓缓下落) 完整代码: import pygame import random# 初始化 Pygame pygame.init()# 设置窗口 width, height 800, 600 screen pygame.display.set_mode((width, height)) pygame.display.set_caption("下雪…

k8s 1.28.2 集群部署 Thanos 对接 MinIO 实现 Prometheus 数据长期存储

文章目录 [toc]什么是 ThanosThanos 的主要功能Thanos 的架构组件Thanos 部署架构SidecarReceive架构选择 开始部署部署架构创建 namespacenode-exporter 部署kube-state-metrics 部署Prometheus Thanos-Sidecar 部署固定节点创建 label生成 secretMinIO 配置etcd 证书 启动 P…

13、基于AT89C52轮询方式扫描按键proteus仿真

一、仿真原理图: 二、仿真效果: 三、相关代码: 1、main主函数: void main(void) { unsigned char ll; VariableInit(); while(1) { value = keyScan(); display(); …

春季测试 2023 我的题解

T1 涂色游戏 这道题目还是比较简单的 容易发现,位于 ( x i , y i ) (x_i,y_i) (xi​,yi​) 的格子的颜色只取决于 ​ x i x_i xi​ 行与 y i y_i yi​ 列的颜色。 这时候可以想到开两个数组,分别存储列与行的绘画信息,然后发现前后的互相…

magic-api简单使用二:自定义返回结果

背景 在上一章 中我们学习了搭建项目和导入文件, 这二天稍微有点时间,研究下这个magic-api的写法。 后续如果需要维护或者更改,也能在项目中尽快上手。 今天我们主要学习自定义返回结果,当然也可以使用官方的。不需要任何更改。…

“启动智能制造引擎 推动新质生产力发展”高峰论坛在京成功举办

在智能制造技术的助力下,北京经开区的智能制造产业稳步发展。2024年10月25日,北京电子科技职业学院图书馆暨北京经济技术开发区公共图书馆举办一场以“启动智能制造引擎 推动新质生产力发展”为主题的高峰论坛于北京亦庄经开区盛元书院圆满落幕。此次论坛为北京经开区智能制造产…

Java 异常处理(6/30)

目录 Java 异常处理 1. 什么是异常 2. 异常处理的关键字 2.1 try-catch 语句 2.2 多个 catch 块 2.3 finally 块 2.4 throw 和 throws 3. 自定义异常 4. 异常处理的最佳实践 总结与后续 Java 异常处理 在软件开发中,异常处理(Exception Handl…

ubuntu22.04安装向日葵

1、下载deb安装包 进入官网下载图形版本:https://sunlogin.oray.com/download/linux?typepersonal 2、命令行安装 sudo chmod x 文件名.deb sudo dpkg -i 文件名.deb 3、开始报错的看这里! 首先展示一下安装成功的效果图: 接下来是我安…

小米手机投屏到Windows笔记本电脑的3个方法,随便选一个

方法一:Windows系统自带的投屏功能 Windows系统本身的功能很多,其中一项就是接收别的电脑或手机的投屏。 操作步骤一,在Windows电脑里进入【设置】,点击【系统】,往下翻页,找到【投影到此电脑】。 如果这…

漏洞挖掘 | 通过域混淆绕过实现账户接管

由于这是一个私有项目,我将使用 example.com 来代替。 很长一段时间以来,我一直想在漏洞赏金项目中找到一个账户接管(ATO)漏洞。于是,我开始探索项目范围内的 account.example.com。 我做的第一件事就是注册一个新账…

加密软件有什么功能?

加密软件是一种专门用于保护数据安全的工具,它通过复杂的加密算法来确保数据在传输和存储过程中的机密性和完整性。以下是加密软件通常具备的主要功能: 一、数据加密 文件加密:能够对单个文件或整个文件夹进行加密,确保只有授权…

Python bs4 结合 Scrapy,进行数据爬取和处理

Python bs4 结合 Scrapy,进行数据爬取和处理 在现代数据分析和机器学习领域,数据爬取是获取网页数据的常用方法。Python 提供了许多工具来进行网页爬取,其中 Scrapy 和 BeautifulSoup(bs4)是最常用的两个库。Scrapy 是…

【p2p、分布式,区块链笔记 Torrent】webtorrent.min.js的实现之appendTo()函数

官方给出的示例通过appendTo函数渲染文件对象,通过torrent.files的元素对象调用: const WebTorrent require(webtorrent)const client new WebTorrent()// Sintel, a free, Creative Commons movie const torrentId magnet:?xturn:btih:08ada5a7a61…

ALIGN_ Tuning Multi-mode Token-level Prompt Alignment across Modalities

文章汇总 当前的问题 目前的工作集中于单模提示发现,即一种模态只有一个提示,这可能不足以代表一个类[17]。这个问题在多模态提示学习中更为严重,因为视觉和文本概念及其对齐都需要推断。此外,仅用全局特征来表示图像和标记是不…

MySQL数据集成至金蝶云星空的解决方案

MySQL数据集成至金蝶云星空的解决方案 SYB生产用料清单新增-深圳天一-半成品-好:MySQL数据集成到金蝶云星空的技术实现 在企业信息化系统中,数据的高效流转和准确对接是确保业务顺畅运行的关键。本文将聚焦于一个具体案例——如何将MySQL中的生产用料清…

javaweb----VS code

前端开发神器:VS Code → 速度快、体积小、插件多 VS Code 安装官网:https://code.visualstudio.com/download VS Code一些必备的插件安装: 1、Chinese (Simplified) 简体中文 2、Code Spell Checker 检查拼写 3、HTML CSS Support 4…

【新闻转载】“假冒 LockBit”来袭:勒索软件借助 AWS S3 偷窃数据,威胁升级

关键要点 Trend团队发现了一些利用 Amazon S3(简单存储服务)传输加速功能的 Golang 勒索软件样本,用于窃取受害者的文件并上传至攻击者控制的 S3 存储桶。 这些样本中硬编码的 Amazon Web Services (AWS) 凭证被用于追踪与恶意活动关联的 AW…

第十五章 Vue工程化开发及Vue CLI脚手架

目录 一、引言 二、Vue CLI 基本介绍 三、安装Vue CLI 3.1. 安装npm和yarn 3.2. 安装Vue CLI 3.3. 查看 Vue 版本 四、创建启动工程 4.1. 创建项目架子 4.2. 启动工程 五、脚手架目录文件介绍 六、核心文件讲解 6.1. index.html 6.2. main.js 6.3. App.vue 一、…

BEV:针孔相机坐标转换

一 、背景 自动驾驶中经常涉及到不同坐标系之间的坐标转换,在BEV方案中用的比较多的是自车坐标到图像坐标的转换,系统整理了一下坐标转换过程流程。 二 、方法 旋转矩阵计算方法: translation: 平移参数[‘x’, ‘y’, ‘z’] 高阶畸变模型…