一文掌握 Apache SeaTunnel 构建系统与分发基础架构

本文介绍基于Maven的SeaTunnel构建系统与分发基础架构。

点击蓝字

关注我们

本文介绍基于Maven的SeaTunnel构建系统与分发基础架构。涵盖多模块项目如何构建、二进制分发包如何组装、连接器插件如何打包与发现,以及如何创建Docker镜像用于部署。

有关运行时插件加载机制的信息,请参阅插件管理与发现(https://deepwiki.com/apache/seatunnel/4.1-plugin-management-and-discovery)。 有关CI/CD工作流程和测试的详细信息,请参阅CI/CD与测试框架(https://deepwiki.com/apache/seatunnel/5.1-cicd-and-testing-framework)。

1

Maven构建系统架构

SeaTunnel采用多模块Maven项目结构,根pom.xml定义整体构建配置和依赖管理。构建系统协调整个项目所有模块的编译、测试、打包和分发。

位于pom.xml 1 - 1136的根POM定义了Maven属性、依赖管理以及所有模块使用的构建插件。关键构建属性包括Java版本(java.version)、Scala版本(scala.version)以及各种依赖版本。

分发组装系统

seatunnel - dist模块使用Maven Assembly插件处理二进制分发的创建。它生成二进制和源代码分发包。

位于seatunnel - dist/pom.xml 1 - 964的分发模块使用Maven Assembly插件创建结构化的分发包。二进制组装包括:

  • 启动JAR包:针对Flink、Spark和SeaTunnel引擎的特定引擎启动模块
  • 连接器依赖项:打包在  connectors/ 目录中的所有连接器JAR包
  • 运行时库:starter/logging/ 中的日志依赖项和共享库
  • Shell脚本:bin/ 目录中具有适当文件权限的可执行脚本
  • 配置:默认配置文件和模板

2

插件发现与映射系统

SeaTunnel使用插件映射系统在运行时将连接器名称解析为JAR文件。plugin - mapping.properties文件作为所有可用连接器的中央注册表。

位于plugin - mapping.properties 1 - 153(https://github.com/apache/seatunnel/blob/02c7eb31/plugin - mapping.properties#L1-L153)的插件映射文件定义了如下映射:

  • seatunnel.source.Kafka = connector - kafka
  • seatunnel.sink.Console = connector - console
  • seatunnel.source.MySQL - CDC = connector - cdc - mysql

位于bin/install - plugin.sh 1 - 53(https://github.com/apache/seatunnel/blob/02c7eb31/bin/install - plugin.sh#L1-L53)的安装插件脚本会根据config/plugin_config 1 - 99(https://github.com/apache/seatunnel/blob/02c7eb31/config/plugin_config#L1-L99)中用户配置的插件选择,从Maven仓库下载连接器JAR包。

3

连接器分发策略

连接器与SeaTunnel核心二进制文件分开分发,以减小下载大小并允许选择性安装。构建系统将每个连接器及其依赖项打包为独立的JAR包。

位于seatunnel - dist/src/main/assembly/assembly - bin - ci.xml 144 - 161(https://github.com/apache/seatunnel/blob/02c7eb31/seatunnel - dist/src/main/assembly/assembly - bin - ci.xml#L144-L161)的CI组装包含所有连接器JAR包以进行全面测试,而位于seatunnel - dist/src/main/assembly/assembly - bin.xml 204 - 216(https://github.com/apache/seatunnel/blob/02c7eb31/seatunnel - dist/src/main/assembly/assembly - bin.xml#L204-L216)的标准二进制组装仅包含基本的演示连接器(connector - fake、connector - console、connector - cdc - base)。

连接器依赖管理在seatunnel - dist/pom.xml 162 - 205(https://github.com/apache/seatunnel/blob/02c7eb31/seatunnel - dist/pom.xml#L162-L205)中进行处理,其中JDBC驱动程序和第三方库被明确包含在分发中。

4

Docker分发系统

SeaTunnel提供用于容器化部署的Docker镜像。Docker构建过程会创建预安装所有必要依赖项的优化镜像。

位于seatunnel - dist/src/main/docker/Dockerfile 1 - 18(https://github.com/apache/seatunnel/blob/02c7eb31/seatunnel - dist/src/main/docker/Dockerfile#L1-L18)的Dockerfile创建一个多阶段构建,其步骤如下:

  1. 解压二进制分发压缩包
  2. 将日志配置为输出到控制台而非文件
  3. 将工作目录设置为/opt/seatunnel
  4. 复制用于集群模式的Hazelcast配置

Docker构建通过docker配置文件与Maven集成,可使用诸如docker.build.skip=false之类的构建属性触发。

5

依赖管理与阴影处理

SeaTunnel使用Maven Shade插件处理依赖冲突,并为不同组件创建超级JAR包。阴影处理策略确保在不同执行引擎上的兼容性。

位于pom.xml 708 - 752(https://github.com/apache/seatunnel/blob/02c7eb31/pom.xml#L708-L752)的根POM对Shade插件进行如下配置:

  • 排除日志框架以避免冲突
  • 针对META - INF/services文件的服务转换器
  • 移除签名文件以确保安全

已知依赖项记录在tools/dependencies/known - dependencies.txt 1 - 130(https://github.com/apache/seatunnel/blob/02c7eb31/tools/dependencies/known - dependencies.txt#L1-L130)中,以确保构建的可重复性和许可证合规性。

阴影模块会创建常见依赖项的重定位版本,以避免SeaTunnel在Flink或Spark集群上运行时出现类路径冲突。

原文链接:https://deepwiki.com/apache/seatunnel/2-build-system-and-distribution#dependency-management-and-shading

Apache SeaTunnel

Apache SeaTunnel是一个云原生的多模态、高性能海量数据集成工具。北京时间 2023 年 6 月1 日,全球最大的开源软件基金会ApacheSoftware Foundation正式宣布Apache SeaTunnel毕业成为Apache顶级项目。目前,SeaTunnel在GitHub上Star数量已达8k+,社区达到6000+人规模。SeaTunnel支持在云数据库、本地数据源、SaaS、大模型等170多种数据源之间进行数据实时和批量同步,支持CDC、DDL变更、整库同步等功能,更是可以和大模型打通,让大模型链接企业内部的数据。




同步Demo

MySQL→Doris | MySQLCDC | MySQL→Hive | HTTP → Doris  | HTTP → MySQL | MySQL→StarRocks|MySQL→Elasticsearch |Kafka→ClickHouse

新手入门

SeaTunnel 让数据集成变得 So easy!3 分钟入门指南
 0 到 1 快速入门 /初探/深入理解 
  分布式集群部署 | CDC数据同步管道 | Oracle-CDC
图片

最佳实践

OPPO | 清风|天翼云|马蜂窝|孩子王|哔哩哔哩|唯品会|众安保险|兆原数通 | 亚信科技|映客|翼康济世|信也科技|华润置地|Shopee|京东科技|58同城|互联网银行|JPMorgan
图片

测试报告

SeaTunnel VS GLUE |  VS Airbyte |  VS DataX|SeaTunnel 与 DataX 、Sqoop、Flume、Flink CDC 对比

图片

源码解析

Zeta引擎源码解析(一) |(二) |(三)| API 源码解析 |2.1.1源码解析|封装 Flink 连接数据库解析





仓库地址: 
https://github.com/apache/seatunnel
网址:
https://seatunnel.apache.org/
Apache SeaTunnel 下载地址:
https://seatunnel.apache.org/download
衷心欢迎更多人加入!
我们相信,在Community Over Code(社区大于代码)、「Open and Cooperation」(开放协作)、「Meritocracy」(精英管理)、以及「多样性与共识决策」等 The Apache Way 的指引下,我们将迎来更加多元化和包容的社区生态,共建开源精神带来的技术进步!
我们诚邀各位有志于让本土开源立足全球的伙伴加入 SeaTunnel 贡献者大家庭,一起共建开源!
提交问题和建议:
https://github.com/apache/seatunnel/issues
贡献代码:
https://github.com/apache/seatunnel/pulls
订阅社区开发邮件列表 : 
dev-subscribe@seatunnel.apache.org
开发邮件列表:
dev@seatunnel.apache.org
加入 Slack:
https://join.slack.com/t/apacheseatunnel/shared_invite/zt-1kcxzyrxz-lKcF3BAyzHEmpcc4OSaCjQ
关注 X.com: 
https://x.com/ASFSeaTunnel