本文介绍基于Maven的SeaTunnel构建系统与分发基础架构。涵盖多模块项目如何构建、二进制分发包如何组装、连接器插件如何打包与发现,以及如何创建Docker镜像用于部署。
有关运行时插件加载机制的信息,请参阅插件管理与发现(deepwiki.com/apache/seat... 有关CI/CD工作流程和测试的详细信息,请参阅CI/CD与测试框架(deepwiki.com/apache/seat...
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(github.com/apache/seat... - 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(github.com/apache/seat... - plugin.sh#L1-L53)的安装插件脚本会根据config/plugin_config 1 - 99(github.com/apache/seat...%25E4%25B8%25AD%25E7%2594%25A8%25E6%2588%25B7%25E9%2585%258D%25E7%25BD%25AE%25E7%259A%2584%25E6%258F%2592%25E4%25BB%25B6%25E9%2580%2589%25E6%258B%25A9%25EF%25BC%258C%25E4%25BB%258EMaven%25E4%25BB%2593%25E5%25BA%2593%25E4%25B8%258B%25E8%25BD%25BD%25E8%25BF%259E%25E6%258E%25A5%25E5%2599%25A8JAR%25E5%258C%2585%25E3%2580%2582 "https://github.com/apache/seatunnel/blob/02c7eb31/config/plugin_config#L1-L99)%E4%B8%AD%E7%94%A8%E6%88%B7%E9%85%8D%E7%BD%AE%E7%9A%84%E6%8F%92%E4%BB%B6%E9%80%89%E6%8B%A9%EF%BC%8C%E4%BB%8EMaven%E4%BB%93%E5%BA%93%E4%B8%8B%E8%BD%BD%E8%BF%9E%E6%8E%A5%E5%99%A8JAR%E5%8C%85%E3%80%82")
连接器分发策略
连接器与SeaTunnel核心二进制文件分开分发,以减小下载大小并允许选择性安装。构建系统将每个连接器及其依赖项打包为独立的JAR包。
位于seatunnel - dist/src/main/assembly/assembly - bin - ci.xml 144 - 161(github.com/apache/seat... - dist/src/main/assembly/assembly - bin - ci.xml#L144-L161)的CI组装包含所有连接器JAR包以进行全面测试,而位于seatunnel - dist/src/main/assembly/assembly - bin.xml 204 - 216(github.com/apache/seat... - dist/src/main/assembly/assembly - bin.xml#L204-L216)的标准二进制组装仅包含基本的演示连接器(connector - fake、connector - console、connector - cdc - base)。
连接器依赖管理在seatunnel - dist/pom.xml 162 - 205(github.com/apache/seat... - dist/pom.xml#L162-L205)中进行处理,其中JDBC驱动程序和第三方库被明确包含在分发中。
Docker分发系统
SeaTunnel提供用于容器化部署的Docker镜像。Docker构建过程会创建预安装所有必要依赖项的优化镜像。
位于seatunnel - dist/src/main/docker/Dockerfile 1 - 18(github.com/apache/seat... - dist/src/main/docker/Dockerfile#L1-L18)的Dockerfile创建一个多阶段构建,其步骤如下:
- 解压二进制分发压缩包
- 将日志配置为输出到控制台而非文件
- 将工作目录设置为
/opt/seatunnel
- 复制用于集群模式的Hazelcast配置
Docker构建通过docker
配置文件与Maven集成,可使用诸如docker.build.skip=false
之类的构建属性触发。
依赖管理与阴影处理
SeaTunnel使用Maven Shade插件处理依赖冲突,并为不同组件创建超级JAR包。阴影处理策略确保在不同执行引擎上的兼容性。
位于pom.xml 708 - 752(github.com/apache/seat...%25E7%259A%2584%25E6%25A0%25B9POM%25E5%25AF%25B9Shade%25E6%258F%2592%25E4%25BB%25B6%25E8%25BF%259B%25E8%25A1%258C%25E5%25A6%2582%25E4%25B8%258B%25E9%2585%258D%25E7%25BD%25AE%25EF%25BC%259A "https://github.com/apache/seatunnel/blob/02c7eb31/pom.xml#L708-L752)%E7%9A%84%E6%A0%B9POM%E5%AF%B9Shade%E6%8F%92%E4%BB%B6%E8%BF%9B%E8%A1%8C%E5%A6%82%E4%B8%8B%E9%85%8D%E7%BD%AE%EF%BC%9A")
- 排除日志框架以避免冲突
- 针对META - INF/services文件的服务转换器
- 移除签名文件以确保安全
已知依赖项记录在tools/dependencies/known - dependencies.txt 1 - 130(github.com/apache/seat... - dependencies.txt#L1-L130)中,以确保构建的可重复性和许可证合规性。
阴影模块会创建常见依赖项的重定位版本,以避免SeaTunnel在Flink或Spark集群上运行时出现类路径冲突。