Apache SeaTunnel详解与部署(最新版本2.3.11)

发布于:2025-07-17 ⋅ 阅读:(18) ⋅ 点赞:(0)

目录

一、概述

1.1、软件介绍

1.2、解决问题​

1.3、软件特性​

1.4、使用用户

1.5、产品对比

二、架构

2.1、运行流程

2.2、连接器​

2.3、引擎

2.3.1、设计理念

2.3.2、集群管理​

2.3.3、核心功能​

2.3.4、引擎对比

三、软件部署

3.1、Docker部署

3.2、发布包部署

3.2.1、Apache SeaTunnel部署与使用 

3.2.1.1、软件解压

3.2.1.2、安装插件

3.2.1.2.1 更换maven地址 

3.2.1.2.2 减少插件下载

3.2.1.3、测试

3.2.1.4、启动服务

3.2.2、 SeaTunnel-Web部署与使用

1、下载解压

2、配置环境变量 

3、 初始化数据库脚本

4、修改 application.yml文件

5、配置引擎配置信息

6、配置版本号

7、下载依赖包 

8、拷贝依赖包 

9、启动web服务

10、检验

11、浏览器验证


一、概述

1.1、软件介绍

SeaTunnel是一个非常易用、超高性能的分布式数据集成平台,支持实时海量数据同步。 每天可稳定高效同步数百亿数据,已被近百家企业应用于生产。

Apache SeaTunnel是中国开发者主导的项目,也是Apache基金会中第一个诞生自中国的数据集成平台项目。

SeaTunnel原名Waterdrop,于2017年由乐视创建,并于同年在GitHub上开源
2021年10月改名为SeaTunnel
2021年12月9日SeaTunnel进入Apache孵化
2023年6月1日Apache SeaTunnel 毕业成为 Apache 顶级项目

Seatunnel的中文是"水滴",来自中国当代科幻小说作家刘慈欣的《三体》系列,它是三体人制造的宇宙探测器,会反射几乎全部的电磁波,表面绝对光滑,温度处于绝对零度,全部由被强互作用力紧密锁死的质子与中子构成,无坚不摧。在末日之战中,仅一个水滴就摧毁了人类太空武装力量近2千艘战舰

官网地址:

Apache SeaTunnel | Apache SeaTunnel

1.2、解决问题

SeaTunnel专注于数据集成和数据同步,主要旨在解决数据集成领域的常见问题:

  • 数据源多样:常用数据源有数百种,版本不兼容。 随着新技术的出现,更多的数据源不断出现。 用户很难找到一个能够全面、快速支持这些数据源的工具。
  • 同步场景复杂:数据同步需要支持离线全量同步、离线增量同步、CDC、实时同步、全库同步等多种同步场景。
  • 资源需求高:现有的数据集成和数据同步工具往往需要大量的计算资源或JDBC连接资源来完成海量小表的实时同步。 这增加了企业的负担。
  • 缺乏质量和监控:数据集成和同步过程经常会出现数据丢失或重复的情况。 同步过程缺乏监控,无法直观了解任务过程中数据的真实情况。
  • 技术栈复杂:企业使用的技术组件不同,用户需要针对不同组件开发相应的同步程序来完成数据集成。
  • 管理和维护困难:受限于底层技术组件(Flink/Spark)不同,离线同步和实时同步往往需要分开开发和管理,增加了管理和维护的难度。

1.3、软件特性

  • 丰富且可扩展的Connector:SeaTunnel提供了不依赖于特定执行引擎的Connector API。 基于该API开发的Connector(Source、Transform、Sink)可以运行在很多不同的引擎上,例如目前支持的SeaTunnel引擎(Zeta)、Flink、Spark等。
  • Connector插件:插件式设计让用户可以轻松开发自己的Connector并将其集成到SeaTunnel项目中。 目前,SeaTunnel 支持超过 100 个连接器,并且数量正在激增。
  • 批流集成:基于SeaTunnel Connector API开发的Connector完美兼容离线同步、实时同步、全量同步、增量同步等场景。 它们大大降低了管理数据集成任务的难度。
  • 支持分布式快照算法,保证数据一致性。
  • 多引擎支持:SeaTunnel默认使用SeaTunnel引擎(Zeta)进行数据同步。 SeaTunnel还支持使用Flink或Spark作为Connector的执行引擎,以适应企业现有的技术组件。 SeaTunnel 支持 Spark 和 Flink 的多个版本。
  • JDBC复用、数据库日志多表解析:SeaTunnel支持多表或全库同步,解决了过度JDBC连接的问题; 支持多表或全库日志读取解析,解决了CDC多表同步场景下需要处理日志重复读取解析的问题。
  • 高吞吐量、低延迟:SeaTunnel支持并行读写,提供稳定可靠、高吞吐量、低延迟的数据同步能力。
  • 完善的实时监控:SeaTunnel支持数据同步过程中每一步的详细监控信息,让用户轻松了解同步任务读写的数据数量、数据大小、QPS等信息。
  • 支持两种作业开发方法:编码和画布设计。 SeaTunnel Web 项目 GitHub - apache/seatunnel-web: SeaTunnel is a distributed, high-performance data integration platform for the synchronization and transformation of massive data (offline & real-time). 提供作业、调度、运行和监控功能的可视化管理。

1.4、使用用户

SeaTunnel 拥有大量用户

1.5、产品对比

对比项 Apache SeaTunnel DataX Apache Sqoop Apache Flume Flink CDC
部署难度 容易 容易 中等,依赖于 Hadoop 生态系统 容易 中等,依赖于 Hadoop 生态系统
运行模式 分布式,也支持单机 单机 本身不是分布式框架,依赖 Hadoop MR 实现分布式 分布式,也支持单机 分布式,也支持单机
健壮的容错机制 无中心化的高可用架构设计,有完善的容错机制 易受比如网络闪断、数据源不稳定等因素影响 MR 模式重,出错处理麻烦 有一定的容错机制 主从模式的架构设计,容错粒度比较粗,容易造成延时
支持的数据源丰富度 支持 MySQL、PostgreSQL、Oracle、SQLServer、Hive、S3、RedShift、HBase、Clickhouse等过 100 种数据源 支持 MySQL、ODPS、PostgreSQL、Oracle、Hive 等 20+ 种数据源 仅支持 MySQL、Oracle、DB2、Hive、HBase、S3 等几种数据源 支持 Kafka、File、HTTP、Avro、HDFS、Hive、HBase等几种数据源 支持 MySQL、PostgresSQL、MongoDB、SQLServer 等 10+ 种数据源
内存资源占用 中等
数据库连接占用 少(可以共享 JDBC 连接) 多(每个表需一个连接)
自动建表 支持 不支持 不支持 不支持 不支持
整库同步 支持 不支持 不支持 不支持 不支持(每个表需配置一次)
断点续传 支持 不支持 不支持 不支持 支持
多引擎支持 支持 SeaTunnel Zeta、Flink、Spark 3 个引擎选其一作为运行时 只能运行在 DataX 自己引擎上 自身无引擎,需运行在 Hadoop MR 上,任务启动速度非常慢 支持 Flume 自身引擎 只能运行在 Flink 上
数据转换算子(Transform) 支持 Copy、Filter、Replace、Split、SQL 、自定义 UDF 等算子 支持补全,过滤等算子,可以 groovy 自定义算子 只有列映射、数据类型转换和数据过滤基本算子 只支持 Interceptor 方式简单转换操作 支持 Filter、Null、SQL、自定义 UDF 等算子
单机性能 比 DataX 高 40%  - 80% 较好 一般 一般 较好
离线同步 支持 支持 支持 支持 支持
增量同步 支持 支持 支持 支持 支持
实时同步 支持 不支持 不支持 支持 支持
CDC同步 支持 不支持 不支持 不支持 支持
批流一体 支持 不支持 不支持 不支持 支持
精确一致性 MySQL、Kafka、Hive、HDFS、File 等连接器支持 不支持 不支持 不支持精确,提供一定程度的一致性 MySQL、PostgreSQL、Kakfa 等连接器支持
可扩展性 插件机制非常易扩展 易扩展 扩展性有限,Sqoop主要用于将数据在Apache Hadoop和关系型数据库之间传输 易扩展 易扩展
统计信息
Web UI 正在实现中(拖拉拽即可完成)
与调度系统集成度 已经与 DolphinScheduler 集成,后续也会支持其他调度系统 不支持 不支持 不支持
社区 非常活跃 非常不活跃 已经从 Apache 退役 非常不活跃 非常活跃

二、架构

2.1、运行流程

SeaTunnel的运行流程如上图所示。

用户配置作业信息并选择提交作业的执行引擎。

Source Connector负责并行读取数据并将数据发送到下游Transform或直接发送到Sink,Sink将数据写入目的地。 值得注意的是,Source、Transform 和 Sink 可以很容易地自行开发和扩展。

SeaTunnel 是一个 EL(T) 数据集成平台。 因此,在SeaTunnel中,Transform只能用于对数据进行一些简单的转换,例如将一列的数据转换为大写或小写,更改列名,或者将一列拆分为多列。

SeaTunnel 使用的默认引擎是 SeaTunnel Engine。 如果您选择使用Flink或Spark引擎,SeaTunnel会将Connector打包成Flink或Spark程序并提交给Flink或Spark运行。

2.2、连接器

  • 源连接器 SeaTunnel 支持从各种关系、图形、NoSQL、文档和内存数据库读取数据; 分布式文件系统,例如HDFS; 以及各种云存储解决方案,例如S3和OSS。 我们还支持很多常见SaaS服务的数据读取。 您可以在[此处] 访问详细列表。 如果您愿意,您可以开发自己的源连接器并将其轻松集成到 SeaTunnel 中。

  • 转换连接器 如果源和接收器之间的架构不同,您可以使用转换连接器更改从源读取的架构,使其与接收器架构相同。

  • Sink Connector SeaTunnel 支持将数据写入各种关系型、图形、NoSQL、文档和内存数据库; 分布式文件系统,例如HDFS; 以及各种云存储解决方案,例如S3和OSS。 我们还支持将数据写入许多常见的 SaaS 服务。 您可以在[此处]访问详细列表。 如果您愿意,您可以开发自己的 Sink 连接器并轻松将其集成到 SeaTunnel 中。

2.3、引擎

2.3.1、设计理念

SeaTunnel Engine 是一个由社区开发的用于数据同步场景的引擎,作为 SeaTunnel 的默认引擎,它支持高吞吐量、低延迟和强一致性的数据同步作业操作,更快、更稳定、更节省资源且易于使用。

SeaTunnel Engine 的整体设计遵循以下路径:

  • 更快,SeaTunnel Engine 的执行计划优化器旨在减少数据网络传输,从而减少由于数据序列化和反序列化造成的整体同步性能损失,使用户能够更快地完成数据同步操作。同时,支持速度限制,以合理速度同步数据。
  • 更稳定,SeaTunnel Engine 使用 Pipeline 作为数据同步任务的最小粒度的检查点和容错。任务的失败只会影响其上游和下游任务,避免了任务失败导致整个作业失败或回滚的情况。同时,SeaTunnel Engine 还支持数据缓存,用于源数据有存储时间限制的场景。当启用缓存时,从源读取的数据将自动缓存,然后由下游任务读取并写入目标。在这种情况下,即使由于目标失败而无法写入数据,也不会影响源的常规读取,防止源数据过期被删除。
  • 节省空间,SeaTunnel Engine 内部使用动态线程共享技术。在实时同步场景中,对于每个表数据量很大但每个表数据量很小的表,SeaTunnel Engine 将在共享线程中运行这些同步任务,以减少不必要的线程创建并节省系统空间。在读取和写入数据方面,SeaTunnel Engine 的设计目标是最小化 JDBC 连接的数量;在 CDC 场景中,SeaTunnel Engine 将重用日志读取和解析资源。
  • 简单易用,SeaTunnel Engine 减少了对第三方服务的依赖,并且可以独立于如 Zookeeper 和 HDFS 等大数据组件实现集群管理、快照存储和集群 HA 功能。这对于目前缺乏大数据平台的用户,或者不愿意依赖大数据平台进行数据同步的用户来说非常有用。

未来,SeaTunnel Engine 将进一步优化其功能,以支持离线批同步的全量同步和增量同步、实时同步和 CDC。

2.3.2、集群管理

  • 支持独立运行;
  • 支持集群运行;
  • 支持自治集群(去中心化),使用户无需为 SeaTunnel Engine 集群指定主节点,因为它可以在运行过程中自行选择主节点,并且在主节点失败时自动选择新的主节点;
  • 自治集群节点发现和具有相同 cluster_name 的节点将自动形成集群。

2.3.3、核心功能

  • 支持在本地模式下运行作业,作业完成后集群自动销毁;
  • 支持在集群模式下运行作业(单机或集群),通过 SeaTunnel 客户端将作业提交给 SeaTunnel Engine 服务,作业完成后服务继续运行并等待下一个作业提交;
  • 支持离线批同步;
  • 支持实时同步;
  • 批流一体,所有 SeaTunnel V2 Connector 均可在 SeaTunnel Engine 中运行;
  • 支持分布式快照算法,并支持与 SeaTunnel V2 Connector 的两阶段提交,确保数据只执行一次。
  • 支持在 Pipeline 级别调用作业,以确保即使在资源有限的情况下也能启动;
  • 支持在 Pipeline 级别对作业进行容错。任务失败只影响其所在 Pipeline,只需要回滚 Pipeline 下的任务;
  • 支持动态线程共享,以实时同步大量小数据集。

2.3.4、引擎对比

Apache SeaTunne默认使用的是自研的SeaTunne Zeta引擎,还支持Spark、Flink计算引擎

三、软件部署

3.1、Docker部署

参考:使用Docker进行部署 | Apache SeaTunnel

3.2、发布包部署

下载地址:

Apache SeaTunnel

或:

apache-seatunnel-2.3.11安装包下载_开源镜像站-阿里云

3.2.1、Apache SeaTunnel部署与使用 

3.2.1.1、软件解压
cd usr/local/soft/
tar -zxvf apache-seatunnel-2.3.11-bin.tar.gz
3.2.1.2、安装插件

安装插件前需要进行Maven镜像地址更换与一些不用的插件不需要下载

cd /usr/local/soft/apache-seatunnel-2.3.11/
sh bin/install-plugin.sh
3.2.1.2.1 更换maven地址 

整个过程非常慢…从国外maven中央仓库下载东西,可以使用maven的阿里云镜像

setting文件地址:/root/.m2/wrapper/dists/apache-maven-3.8.4-bin/52ccbt68d252mdldqsfsn03jlf/apache-maven-3.8.4/conf/

 换成阿里云镜像

<mirror>
    <id>alimaven</id>
    <mirrorOf>central</mirrorOf>
    <name>aliyun maven</name>
    <url>https://maven.aliyun.com/repository/central</url>
</mirror>
<mirror> 
    <id>aliyun-maven</id>
    <mirrorOf>*</mirrorOf> 
    <name>aliyun maven</name> 
    <url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>

 

更换后再下载速度很快

3.2.1.2.2 减少插件下载

默认插件全部下载,如果自己用不到,可以注释掉,因为即便下载了也不用,占用空间,如果下载有需要可以再下载,配置地址如下:/usr/local/soft/apache-seatunnel-2.3.11/config/plugin_config

#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License.  You may obtain a copy of the License at
#
#    http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
#
# This mapping is used to resolve the Jar package name without version (or call artifactId)
#
# corresponding to the module in the user Config, helping SeaTunnel to load the correct Jar package.
# Don't modify the delimiter " -- ", just select the plugin you need
--connectors-v2--
#connector-amazondynamodb
connector-assert
#connector-cassandra
connector-cdc-mysql
connector-cdc-mongodb
#connector-cdc-sqlserver
connector-cdc-postgres
#connector-cdc-oracle
#connector-cdc-tidb
connector-clickhouse
connector-datahub
connector-dingtalk
#connector-doris
connector-elasticsearch
connector-email
connector-file-ftp
connector-file-hadoop
connector-file-local
connector-file-oss
connector-file-jindo-oss
#connector-file-s3
connector-file-sftp
connector-file-obs
#connector-google-sheets
#connector-google-firestore
connector-hive
connector-http-base
connector-http-feishu
connector-http-gitlab
connector-http-github
connector-http-jira
connector-http-klaviyo
connector-http-lemlist
connector-http-myhours
connector-http-notion
connector-http-onesignal
connector-http-wechat
connector-hudi
connector-iceberg
connector-influxdb
connector-iotdb
connector-jdbc
connector-kafka
connector-kudu
#connector-maxcompute
connector-mongodb
connector-neo4j
#connector-openmldb
#connector-pulsar
connector-rabbitmq
connector-redis
connector-druid
#connector-s3-redshift
#connector-sentry
#connector-slack
connector-socket
#connector-starrocks
#connector-tablestore
#connector-selectdb-cloud
connector-hbase
#connector-amazonsqs
#connector-easysearch
#connector-paimon
#connector-rocketmq
#connector-tdengine
connector-web3j
#connector-milvus
#connector-activemq
#connector-sls
#connector-qdrant
#connector-typesense
#connector-cdc-opengauss

连接器下载到/usr/local/soft/apache-seatunnel-2.3.11/connectors/,可以单独保存,以后安装就不用再下载

上述内容也可以直接上传,地址如下
链接: https://pan.baidu.com/s/1Q4lTMtiBWlP5-3epmCC6jw?pwd=ejkx 提取码: ejkx 

3.2.1.3、修改配置文件

vi /usr/local/soft/apache-seatunnel-2.3.11/config/seatunnel-env.sh

修改路径

# Home directory of spark distribution.
SPARK_HOME=${SPARK_HOME:-/usr/local/soft/spark-4.0.0-bin-hadoop3}
# Home directory of flink distribution.
FLINK_HOME=${FLINK_HOME:-/opt/flink}

 

3.2.1.3、测试
cd /usr/local/soft/apache-seatunnel-2.3.11/
./bin/seatunnel.sh --config ./config/v2.batch.config.template -m local

3.2.1.4、启动服务

用于web端连接

seatunnel-cluster.sh

或 

cd /usr/local/soft/apache-seatunnel-2.3.11/bin/
nohup sh seatunnel-cluster.sh 2>&1 &

关闭

stop-seatunnel-cluster.sh

3.2.2、 SeaTunnel-Web部署与使用

1、下载解压

下载地址:Apache SeaTunnel

或:apache-seatunnel-seatunnel-web-1.0.2安装包下载_开源镜像站-阿里云

cd /usr/local/soft/
tar -zxvf apache-seatunnel-web-1.0.2-bin.tar.gz

2、配置环境变量 

vim /etc/profile

添加

export SEATUNNEL_HOME=/usr/local/soft/apache-seatunnel-2.3.11
export SEATUNNEL_WEB_HOME=/usr/local/soft/apache-seatunnel-web-1.0.2-bin
export PATH=$PATH:$SEATUNNEL_HOME/bin:$SEATUNNEL_WEB_HOME/bin

使环境变量生效

source /etc/profile

3、 初始化数据库脚本

登录数据库

mysql -u root -p

输入密码后执行脚本

source /usr/local/soft/apache-seatunnel-web-1.0.2-bin/script/seatunnel_server_mysql.sql

 

4、修改 application.yml文件
 vi /usr/local/soft/apache-seatunnel-web-1.0.2-bin/conf/application.yml

修改数据库相关参数 

添加secretkey

代码生成:

        <dependency>
            <groupId>io.jsonwebtoken</groupId>
            <artifactId>jjwt-api</artifactId>
            <version>0.11.2</version>
        </dependency>
        <dependency>
            <groupId>io.jsonwebtoken</groupId>
            <artifactId>jjwt-impl</artifactId>
            <version>0.11.2</version>
        </dependency>
import io.jsonwebtoken.SignatureAlgorithm;
import io.jsonwebtoken.security.Keys;

import javax.crypto.SecretKey;
import java.util.Base64;

public class App {
    public static void main(String[] args) {
        SecretKey secretKey = Keys.secretKeyFor(SignatureAlgorithm.HS256);
        String key =  Base64.getEncoder().encodeToString(secretKey.getEncoded());
        System.out.println(key);
    }

}

 运行结果

RrvTLM4y/+J5HU1lB2NM0/9dVnlhpF5fuV9v1z2+M9w=

5、配置引擎配置信息
cp /usr/local/soft/apache-seatunnel-2.3.11/config/hazelcast-client.yaml /usr/local/soft/apache-seatunnel-web-1.0.2-bin/conf/
cp /usr/local/soft/apache-seatunnel-2.3.11/connectors/plugin-mapping.properties /usr/local/soft/apache-seatunnel-web-1.0.2-bin/conf/
6、配置版本号
vi /usr/local/soft/apache-seatunnel-web-1.0.2-bin/bin/download_datasource.sh

修改版本号为1.0.2 

7、下载依赖包 
cd /usr/local/soft/apache-seatunnel-web-1.0.2-bin/bin/
download_datasource.sh

 下载后的包在/usr/local/soft/apache-seatunnel-web-1.0.2-bin/datasource/文件夹中

8、拷贝依赖包 

将/usr/local/soft/apache-seatunnel-web-1.0.2-bin/datasource/所有文件拷贝到/usr/local/soft/apache-seatunnel-web-1.0.2-bin/libs/文件夹下

cp /usr/local/soft/apache-seatunnel-web-1.0.2-bin/datasource/* /usr/local/soft/apache-seatunnel-web-1.0.2-bin/libs/
cp /usr/local/soft/apache-seatunnel-web-1.0.2-bin/datasource/* /usr/local/soft/apache-seatunnel-2.3.11/lib/

配置MySQL依赖包

同时将准备好的mysql-connector-java-8.0.15.jar添加到/usr/local/soft/apache-seatunnel-web-1.0.2-bin/libs/文件夹中

9、启动web服务
seatunnel-backend-daemon.sh start
 10、检验
jps

11、浏览器验证

浏览器输入:http://node11:8801/

默认登录的用户名和密码:admin

设置中文

FAQ:

1、

解决方案:

url: jdbc:mysql://node11:3306/seatunnel?serverTimezone=UTC&useSSL=false&useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true&allowPublicKeyRetrieval=true


网站公告

今日签到

点亮在社区的每一天
去签到