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

本文介绍基于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创建一个多阶段构建,其步骤如下:

  1. 解压二进制分发压缩包
  2. 将日志配置为输出到控制台而非文件
  3. 将工作目录设置为/opt/seatunnel
  4. 复制用于集群模式的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集群上运行时出现类路径冲突。

原文链接:deepwiki.com/apache/seat...

相关推荐
AgeClub2 小时前
一周快讯 | 银发文娱旅游一周新鲜事
大数据·人工智能·twitter
jie*3 小时前
小杰机器学习高级(two)——极大似然估计、交叉熵损失函数
大数据·人工智能·机器学习·tensorflow·逻辑回归·数据库架构·sklearn
Days20503 小时前
一款专业实用、功能出众、操作便捷的EXE加密程序
开源
曼曼青青草4 小时前
智能体介绍及搭建实战(智能运营)
大数据·数据库·人工智能
TDengine (老段)4 小时前
TDengine 聚合函数 HISTOGRAM 用户手册
大数据·数据库·sql·物联网·时序数据库·iot·tdengine
风车带走过往4 小时前
部署开源PPTagent 生成工具
linux·开源
Aloudata技术团队5 小时前
智能问数 Agent 如何确保 SQL 生成 100% 准确?
大数据·数据分析·数据可视化
Lx3525 小时前
Hadoop多租户环境下的资源隔离与性能优化
大数据·hadoop