写点什么

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

作者:白鲸开源
  • 2025-09-25
    天津
  • 本文字数:2010 字

    阅读完需:约 7 分钟

本文介绍基于 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)。

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/目录中具有适当文件权限的可执行脚本

  • 配置:默认配置文件和模板

插件发现与映射系统

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 包。

连接器分发策略

连接器与 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 驱动程序和第三方库被明确包含在分发中。

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之类的构建属性触发。

依赖管理与阴影处理

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

用户头像

白鲸开源

关注

一家开源原生的DataOps商业公司。 2022-03-18 加入

致力于打造下一代开源原生的DataOps 平台,助力企业在大数据和云时代,智能化地完成多数据源、多云及信创环境的数据集成、调度开发和治理,以提高企业解决数据问题的效率,提升企业分析洞察能力和决策能力。

评论

发布
暂无评论
一文掌握 Apache SeaTunnel 构建系统与分发基础架构_大数据_白鲸开源_InfoQ写作社区