SeaTunnel Zeta 引擎 Hybrid 模式单机部署指南
概述
本文档介绍如何在 单台 Ubuntu 24.04 虚拟机上以 Zeta 引擎 Hybrid 模式 部署 Apache SeaTunnel,单节点同时承担 Master 调度和 Worker 执行职责。
架构说明
┌─────────────────────────────────────────┐
│ Ubuntu 24.04 虚拟机 │
│ 192.168.192.131 │
├─────────────────────────────────────────┤
│ │
│ ┌─────────────────────────────────┐ │
│ │ SeaTunnel Zeta 引擎 │ │
│ │ Hybrid 模式 │ │
│ │ │ │
│ │ ┌──────────┐ ┌───────────┐ │ │
│ │ │ Master │ │ Worker │ │ │
│ │ │ (调度) │ │ (执行) │ │ │
│ │ └──────────┘ └───────────┘ │ │
│ │ │ │
│ │ 端口: 5801 (Engine) │ │
│ │ 端口: 8080 (Web UI) │ │
│ └─────────────────────────────────┘ │
│ │
│ /opt/seatunnel/ 安装目录 │
│ /data/seatunnel/ 数据目录 │
│ /var/log/seatunnel/ 日志目录 │
└─────────────────────────────────────────┘
- 单节点对等架构:一台机器同时扮演 Master 和 Worker 角色
- Zeta 引擎:SeaTunnel 自研引擎,Hybrid 模式下调度和执行在同一进程内完成
- 操作系统:Ubuntu 24.04 LTS
- 部署模式:Zeta 引擎 Hybrid (混合) 单机模式
Hybrid 模式 vs 传统分离模式(单机场景)
| 特性 | Hybrid 单机模式 | 传统分离单机模式 |
|---|---|---|
| 部署复杂度 | ⭐⭐⭐⭐⭐ 一条命令启动 | ⭐⭐⭐ 需分别启动 Master 和 Worker |
| 配置复杂度 | ⭐⭐⭐⭐⭐ 一份配置文件搞定 | ⭐⭐ 两份配置,需区分角色 |
| 资源利用率 | ⭐⭐⭐⭐⭐ 单进程复用资源 | ⭐⭐⭐ 两个进程,存在开销 |
| 运维简便 | ⭐⭐⭐⭐⭐ 一个 service 管理 | ⭐⭐ 两个 service 分别管理 |
| 适用场景 | 开发/测试/小型生产环境 | 仅需 Worker 执行时 |
一、环境准备
步骤 1:更新系统软件源
# 更新软件包列表
sudo apt update
# 升级已安装的软件包(可选但推荐)
sudo apt upgrade -y
步骤 2:配置主机名
# 设置主机名(多环境部署时请区分,如 seatunnel-sit、seatunnel-uat)
sudo hostnamectl set-hostname seatunnel-node1
# 验证
hostname
# 应输出:seatunnel-node1
步骤 3:配置防火墙
# 开放 SeaTunnel 所需端口
sudo ufw allow 8080/tcp # Web UI 和 REST API
sudo ufw allow 5801/tcp # Hazelcast 集群通信(扩展多节点时需要)
# 验证配置
sudo ufw status
# 预期输出:
# Status: active
# To Action From
# 22/tcp ALLOW Anywhere
# 5801/tcp ALLOW Anywhere
# 8080/tcp ALLOW Anywhere
步骤 4:安装 OpenJDK 17
# 安装 OpenJDK 17
sudo apt install -y openjdk-17-jdk
# 验证安装
java -version
# 应输出类似:openjdk version "17.0.x" ...
# 配置 JAVA_HOME 环境变量(tee 会自动创建 /etc/profile.d/seatunnel.sh)
cat <<'EOF' | sudo tee /etc/profile.d/seatunnel.sh
export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64
export PATH=$JAVA_HOME/bin:$PATH
EOF
# 使配置生效
source /etc/profile.d/seatunnel.sh
# 验证
env | grep JAVA_HOME
步骤 5:创建必要的目录结构
# 1. 创建安装目录(存放 SeaTunnel 程序)
sudo mkdir -p /opt/seatunnel
# 2. 创建数据目录(存放 Checkpoint 和 Savepoint)
sudo mkdir -p /data/seatunnel/{checkpoint,savepoint,tmp}
# 3. 创建日志目录(存放运行日志)
sudo mkdir -p /var/log/seatunnel
# 4. 设置目录权限
sudo chown -R $USER:$USER /opt/seatunnel /data/seatunnel /var/log/seatunnel
# 5. 验证目录结构
ls -lh /opt/seatunnel
ls -lh /data/seatunnel/
ls -lh /var/log/seatunnel
目录用途说明:
| 目录路径 | 用途 | 空间建议 |
|---|---|---|
/opt/seatunnel/ | SeaTunnel 程序安装目录 | 10GB |
/data/seatunnel/checkpoint/ | Checkpoint 数据存储 | 50-100GB |
/data/seatunnel/savepoint/ | Savepoint 数据存储 | 20-50GB |
/data/seatunnel/tmp/ | 临时文件和缓存 | 20GB |
/var/log/seatunnel/ | 日志文件 | 20GB |
磁盘空间参考:
| 目录 | 建议空间 | 说明 |
|---|---|---|
/opt/seatunnel/ | 10 GB | 程序文件 + 插件 + 临时文件 |
/data/seatunnel/ | 50-100 GB | Checkpoint + Savepoint |
/var/log/seatunnel/ | 20 GB | 日志文件 |
| 总计 | 80-130 GB | 建议使用 SSD 硬盘 |
二、下载并安装 SeaTunnel
# 下载安装包
cd /tmp
wget https://dlcdn.apache.org/seatunnel/2.3.13/apache-seatunnel-2.3.13-bin.tar.gz
# 解压到安装目录(文件在当前目录 /tmp 下)
sudo tar -xzf apache-seatunnel-2.3.13-bin.tar.gz -C /opt/seatunnel --strip-components=1
# 验证安装
ls -lh /opt/seatunnel/
# 应看到 bin/, config/, lib/, connectors/ 等目录
安装 Connector 插件
SeaTunnel 的 Connector 需要单独下载,安装包只包含少量基础插件。
方式 1:安装全部插件(简单)
# 编辑插件配置,列出需要的 Connector
vim /opt/seatunnel/config/plugin_config
文件内容示例(根据实际需求增删):
# Source Connectors
connector-fake
connector-jdbc
connector-kafka
connector-mongodb
connector-hbase
# Sink Connectors
connector-console
connector-jdbc
connector-clickhouse
connector-doris
connector-elasticsearch
# Transform
connector-copy
connector-sql
默认的 plugin_config 已经列出了常见 Connector,可直接使用,无需修改。
配置 Maven 国内镜像(加速下载)
install-plugin.sh 底层用 Maven 从 repo.maven.apache.org 下载 jar 包,国内下载慢容易超时。先配置阿里云镜像:
mkdir -p ~/.m2
cat > ~/.m2/settings.xml <<'EOF'
<?xml version="1.0" encoding="UTF-8"?>
<settings>
<mirrors>
<mirror>
<id>aliyun</id>
<mirrorOf>central</mirrorOf>
<name>Aliyun Maven</name>
<url>https://maven.aliyun.com/repository/public</url>
</mirror>
</mirrors>
</settings>
EOF
# 验证
cat ~/.m2/settings.xml
注意:
maven-wrapper.properties中的阿里云镜像地址只控制 Maven 工具本身的下载,不管 jar 包依赖。配置~/.m2/settings.xml才是正确方式。
执行安装:
# 安装插件
/opt/seatunnel/bin/install-plugin.sh
# 验证已安装的插件
ls /opt/seatunnel/connectors/
方式 2:安装指定插件
# 安装单个 Connector
/opt/seatunnel/bin/install-plugin.sh connector-fake
# 安装多个 Connector
/opt/seatunnel/bin/install-plugin.sh \
connector-fake \
connector-console \
connector-jdbc \
connector-kafka \
connector-doris
注意:首次安装插件需要联网,耗时取决于网络速度。如果服务器无法访问外网,需要在有网的机器上下载后上传到
plugins/目录。不同版本 SeaTunnel 对应的 Connector 版本不同,切勿混用。
三、Hybrid 模式配置
单机 Hybrid 模式下,Master 和 Worker 运行在同一进程内,只需一份配置文件。
步骤 1:配置 Hazelcast 集群通信
Hazelcast 配置在独立文件 config/hazelcast.yaml 中。DolphinScheduler 在另一台机器,需要把 localhost 改成服务器实际 IP:
vim /opt/seatunnel/config/hazelcast.yaml
找到 member-list 行,将 localhost 改为服务器 IP:
hazelcast:
cluster-name: seatunnel
network:
rest-api:
enabled: false
endpoint-groups:
CLUSTER_WRITE:
enabled: true
DATA:
enabled: true
join:
tcp-ip:
enabled: true
# 改为服务器实际 IP,否则 DolphinScheduler 连不上
member-list:
- 192.168.192.131
port:
auto-increment: false
port: 5801
properties:
hazelcast.invocation.max.retry.count: 20
hazelcast.tcp.join.port.try.count: 30
hazelcast.logging.type: log4j2
hazelcast.operation.generic.thread.count: 50
hazelcast.heartbeat.failuredetector.type: phi-accrual
hazelcast.heartbeat.interval.seconds: 2
hazelcast.max.no.heartbeat.seconds: 180
hazelcast.heartbeat.phiaccrual.failuredetector.threshold: 10
hazelcast.heartbeat.phiaccrual.failuredetector.sample.size: 200
hazelcast.heartbeat.phiaccrual.failuredetector.min.std.dev.millis: 100
步骤 2:修改引擎配置
vim /opt/seatunnel/config/seatunnel.yaml
在默认配置基础上,只改以下 3 处:
seatunnel:
engine:
classloader-cache-mode: true
history-job-expire-minutes: 1440
backup-count: 1
queue-type: blockingqueue
print-execution-info-interval: 60
print-job-metrics-info-interval: 60
slot-service:
dynamic-slot: true
checkpoint:
interval: 300000 # 改:10s → 5min,降低 I/O
timeout: 60000
storage:
type: hdfs # 不用改,hdfs + file:// 等价于本地存储
max-retained: 3
plugin-config:
namespace: /data/seatunnel/checkpoint # 改:/tmp → /data,持久化
storage.type: hdfs
fs.defaultFS: file:///data/seatunnel/ # 改:/tmp → /data
telemetry:
metric:
enabled: false
logs:
scheduled-deletion-enable: true
http:
enable-http: true
port: 8080
enable-dynamic-port: false
enable-basic-auth: true # 取消注释
basic-auth-username: "admin" # 取消注释
basic-auth-password: "admin123" # 取消注释
改动说明:
| 改了什么 | 默认值 | 原因 |
|---|---|---|
checkpoint.interval | 10000 | 10 秒太频繁,5 分钟够用 |
namespace / fs.defaultFS | /tmp/ | /tmp 重启就没了,换 /data |
http.enable-basic-auth | 注释掉 | 取消注释,启用认证 |
配置修改总结
| 文件 | 配置项 | 默认值 | 改什么 |
|---|---|---|---|
hazelcast.yaml | member-list | localhost | 改为服务器 IP,DS 才能跨机器连接 |
seatunnel.yaml | checkpoint.interval | 10000 | 300000,降低磁盘 I/O |
seatunnel.yaml | namespace + fs.defaultFS | /tmp/ | /data/seatunnel/,重启不丢失 |
seatunnel.yaml | enable-basic-auth | 注释掉 | 取消注释,启用认证 |
其余配置保持不变。
在 vim 中操作
- 按
i进入插入模式,编辑内容 - 按
Esc退出插入模式 - 输入
:wq保存并退出
可选:使用 S3 存储 Checkpoint
如果后续需要扩展为多节点集群,可以将 Checkpoint 切换到 S3:
# seatunnel.yaml 中 checkpoint 部分改为:
checkpoint:
storage:
type: s3
max-retained: 3
plugin-config:
storage.type: s3
namespace: "/seatunnel/checkpoint"
s3.bucket: "s3a://your-checkpoint-bucket"
fs.defaultFS: "s3a://your-checkpoint-bucket"
fs.s3a.endpoint: "http://192.168.192.111:9000"
fs.s3a.path.style.access: true
fs.s3a.access.key: "your-access-key"
fs.s3a.secret.key: "your-secret-key"
fs.s3a.aws.credentials.provider: org.apache.hadoop.fs.s3a.SimpleAWSCredentialsProvider
四、启动服务
方式 1:前台启动(适合调试)
cd /opt/seatunnel
./bin/seatunnel.sh
按 Ctrl + C 可停止。
方式 2:后台启动(简单实用)
cd /opt/seatunnel
nohup ./bin/seatunnel.sh > /var/log/seatunnel/startup.log 2>&1 &
# 查看进程
ps aux | grep seatunnel
方式 3:Systemd 管理(推荐,开机自启)
创建服务文件 /etc/systemd/system/seatunnel.service:
[Unit]
Description=SeaTunnel Zeta Engine (Hybrid Mode)
After=network.target
[Service]
Type=simple
User=root
Environment="JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64"
ExecStart=/opt/seatunnel/bin/seatunnel-cluster.sh
ExecStop=/opt/seatunnel/bin/stop-seatunnel-cluster.sh
Restart=on-failure
RestartSec=10
[Install]
WantedBy=multi-user.target
启动并设置开机自启:
# 重载 systemd
sudo systemctl daemon-reload
# 启动服务
sudo systemctl start seatunnel
# 设置开机自启
sudo systemctl enable seatunnel
# 查看状态
sudo systemctl status seatunnel
五、验证部署
1. 检查服务状态
# systemd 状态
sudo systemctl status seatunnel
# 检查端口是否在监 听
ss -tlnp | grep -E "5801|8080"
# 预期看到 5801 和 8080 端口
2. 查看日志
# 实时查看日志
tail -f /opt/seatunnel/logs/seatunnel-engine.log
# 查看启动日志
tail -100 /opt/seatunnel/logs/seatunnel-engine.log
# 搜索启动成功标志
grep -i "started\|ready\|master\|hybrid" /opt/seatunnel/logs/seatunnel-engine.log
3. 访问 Web UI
浏览器访问:http://192.168.192.131:8080
- 用户名:
admin - 密码:
admin123