跳到主要内容

SeaTunnel 集群部署指南

概述​

本文档介绍如何在 Ubuntu 24.04 虚拟机上部署 Apache SeaTunnel 集群,采用 1 个 Master + 2 个 Worker 的高可用架构。

架构说明​

┌─────────────────┐
│ SeaTunnel │
│ Master │
│ (Coordinator) │
│ 192.168.192.131│
└────────┬────────┘
│
┌────┴────┐
│ │
▼ ▼
┌─────────┐ ┌─────────┐
│ Worker 1│ │ Worker 2│
│192.168. │ │192.168. │
│ 192.132│ │ 192.133│
└─────────┘ └─────────┘
  • Master 节点 (192.168.192.131): 负责作业调度、资源管理、Checkpoint 协调
  • Worker 节点 (192.168.192.132/133): 负责实际的数据处理任务执行
  • 操作系统: Ubuntu 24.04 LTS
  • 部署模式: Standalone 集群部署

Linux虚拟机部署方案​

适用场景:3 台 Linux 虚拟机,无 Kubernetes 部署模式:Master 和 Worker 角色分离,独立部署

一、架构说明​

1. 节点角色分配​

明确分工,不混用:

节点IP 地址角色端口职能说明
节点 1192.168.192.131Master5801, 8080协调者,负责任务调度和管理
节点 2192.168.192.132Worker15801执行者,负责数据处理
节点 3192.168.192.133Worker25801执行者,负责数据处理

为什么角色分离?

  • ✅ 职责清晰:Master 专注调度,Worker 专注执行
  • ✅ 性能隔离:避免相互影响
  • ✅ 易于扩展:后续可单独增加 Worker 节点
  • ✅ 便于维护:问题定位更简单

2. 目录规划与磁盘空间​

# 所有节点统一使用以下目录
/opt/seatunnel/ # 安装目录(建议 10GB)
/data/seatunnel/ # 数据目录(建议 100GB+,使用 S3 可减小)
/var/log/seatunnel/ # 日志目录(建议 20GB)

磁盘空间详细规划:

目录Master 节点Worker 节点说明
/opt/seatunnel/10 GB10 GB程序文件 + 插件 + 临时文件
- 安装包解压:~5GB
- Connector 插件:~2GB
- 运行临时文件:~3GB
/data/seatunnel/50-100 GB50-100 GBCheckpoint + Savepoint
- 本地存储方案:每个作业 10-50GB
- S3 存储方案:仅缓存,20GB 足够
- 保留策略:max-retained: 3
/var/log/seatunnel/20 GB20 GB日志文件
- engine.log:~10GB(保留 7 天)
- gc.log:~5GB
- job日志:~5GB
总计80-130 GB80-130 GB建议使用 SSD 硬盘

分区建议:

# 推荐的分区方案
/ 50G # 系统分区
/opt 20G # 应用程序
/data 200G+ # 数据分区(单独挂载)
/var 30G # 日志和变量
swap 8-16G # 交换分区(内存的 50%-100%)

磁盘类型选择:

场景推荐类型理由
测试环境HDD 机械硬盘成本低,满足基本需求
生产环境SSD 固态硬盘I/O 性能高,Checkpoint 写入快
高性能场景NVMe SSD极低延迟,适合高频 Checkpoint

空间监控命令:

# 查看磁盘使用情况
df -h /opt/seatunnel /data/seatunnel /var/log/seatunnel

# 查看目录大小
du -sh /opt/seatunnel
du -sh /data/seatunnel
du -sh /var/log/seatunnel

# 查找大文件
find /data/seatunnel -type f -size +1G -exec ls -lh {} \;

自动清理策略(可选):

# 创建清理脚本 /opt/scripts/cleanup-seatunnel.sh
#!/bin/bash

# 删除 7 天前的日志
find /var/log/seatunnel -name "*.log" -mtime +7 -delete

# 删除 3 天前的旧 Checkpoint(如果未配置自动清理)
find /data/seatunnel/checkpoint -type d -mtime +3 -exec rm -rf {} \;

# 删除空目录
find /data/seatunnel -type d -empty -delete

配置定时任务(每天凌晨 2 点执行):

# crontab -e
0 2 * * * /opt/scripts/cleanup-seatunnel.sh

二、前置准备(3 台虚拟机都要执行)​

步骤 1:基础环境配置​

# 1. 更新软件源
sudo apt update

# 2. 关闭防火墙(测试环境)
sudo ufw disable

# 3. 配置 hosts(3 台机器都要配置)
sudo tee -a /etc/hosts <<EOF
192.168.192.131 seatunnel-master
192.168.192.132 seatunnel-worker1
192.168.192.133 seatunnel-worker2
EOF

# 4. 验证网络互通
ping seatunnel-master
ping seatunnel-worker1
ping seatunnel-worker2

步骤 2:安装 JDK​

# Ubuntu 24.04 安装 OpenJDK 17(推荐)
sudo apt install -y openjdk-17-jdk

# 验证
java -version

# 配置 JAVA_HOME(可选)
export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64
export PATH=$JAVA_HOME/bin:$PATH

一、环境准备(所有节点执行)​

本章节指导你从零开始配置 SeaTunnel 集群环境,3 台虚拟机都需要执行以下步骤。

步骤 1:更新系统软件源​

# 更新软件包列表
sudo apt update

# 升级已安装的软件包(可选但推荐)
sudo apt upgrade -y

步骤 2:配置主机名和 hosts 解析​

在每台机器上设置唯一的主机名:

Master 节点 (192.168.192.131):

# 设置主机名
sudo hostnamectl set-hostname seatunnel-master

# 验证
hostname
# 应输出:seatunnel-master

Worker1 节点 (192.168.192.132):

sudo hostnamectl set-hostname seatunnel-worker1
hostname
# 应输出:seatunnel-worker1

Worker2 节点 (192.168.192.133):

sudo hostnamectl set-hostname seatunnel-worker2
hostname
# 应输出:seatunnel-worker2

在所有节点上配置 hosts 解析(3 台机器都要添加):

# 编辑 hosts 文件
sudo tee -a /etc/hosts <<EOF
192.168.192.131 seatunnel-master
192.168.192.132 seatunnel-worker1
192.168.192.133 seatunnel-worker2
EOF

# 验证配置
cat /etc/hosts

步骤 3:关闭防火墙(测试环境)​

# Ubuntu 使用 ufw 防火墙
sudo ufw disable

# 验证状态
sudo ufw status
# 应输出:Status: inactive

生产环境建议:如果开启防火墙,需要开放以下端口:

  • 5801/tcp (Hazelcast 集群通信)
  • 8080/tcp (HTTP API 和 Web UI,仅 Master 需要)

步骤 4:安装 OpenJDK 17​

# 安装 OpenJDK 17
sudo apt install -y openjdk-17-jdk

# 验证安装
java -version
# 应输出类似:openjdk version "17.0.x" ...

# 配置 JAVA_HOME 环境变量
echo 'export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64' | sudo tee /etc/profile.d/seatunnel.sh
echo 'export PATH=$JAVA_HOME/bin:$PATH' | sudo tee -a /etc/profile.d/seatunnel.sh

# 使配置生效
source /etc/profile.d/seatunnel.sh

# 验证
env | grep JAVA_HOME

步骤 5:创建必要的目录结构​

这是关键步骤! SeaTunnel 不会自动创建这些目录,需要手动创建:

# 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

步骤 6:验证网络连通性​

# 在 Master 节点上测试
ping seatunnel-worker1 -c 4
ping seatunnel-worker2 -c 4

# 在 Worker 节点上测试
ping seatunnel-master -c 4

二、下载并安装 SeaTunnel(所有节点执行)​

# 下载安装包(3 台机器都执行)
cd /tmp
wget https://archive.apache.org/dist/seatunnel/2.3.10/apache-seatunnel-2.3.10-bin.tar.gz

# 解压到安装目录
sudo tar -xzf apache-seatunnel-2.3.10-bin.tar.gz -C /opt/seatunnel --strip-components=1

# 验证安装
ls -lh /opt/seatunnel/
# 应看到 bin/, config/, lib/, plugins/ 等目录

# 清理安装包
rm -f /tmp/apache-seatunnel-2.3.10-bin.tar.gz

三、配置 Master 节点(仅 192.168.192.131 执行)​

重要:本节只在 Master 节点 (192.168.192.131) 上执行,Worker 节点不需要!

步骤 1:编辑配置文件​

在 Master 节点上编辑 /opt/seatunnel/config/seatunnel.yaml:

# 打开配置文件(使用 nano 编辑器,新手友好)
sudo nano /opt/seatunnel/config/seatunnel.yaml

删除文件原有内容,完整替换为以下配置:

seatunnel:
engine:
# 标识这是 Master 节点
master-node: true

# 集群配置
hazelcast:
cluster-name: seatunnel-cluster
network:
port: 5801
port-auto-increment: false
join:
multicast:
enabled: false
tcp-ip:
enabled: true
member-list: |
192.168.192.131:5801
192.168.192.132:5801
192.168.192.133:5801

# Checkpoint 配置(只在 Master 配置)
checkpoint:
interval: 300000
timeout: 60000
storage:
type: s3 # 可选:local 或 s3
max-retained: 3
plugin-config:
# === 方案 1:使用 S3 存储(推荐生产环境)===
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" # MinIO/S3 端点
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

# === 方案 2:使用本地存储(测试环境)===
# 如果要用本地存储,删除上面 S3 配置,取消下面注释:
# storage.type: local
# namespace: "/data/seatunnel/checkpoint"

# Web UI 和 API 配置
http:
enable-http: true
port: 8080
enable-basic-auth: true
basic-auth-username: "admin"
basic-auth-password: "admin123"

步骤 2:保存并退出​

在 nano 编辑器中:

  1. 按 Ctrl + O 保存文件
  2. 按 Enter 确认文件名
  3. 按 Ctrl + X 退出编辑器

四、配置 Worker 节点(192.168.192.132 和 192.168.192.133 执行)​

重要:本节在两个 Worker 节点上都执行!

步骤 1:编辑配置文件​

在 Worker1 (192.168.192.132) 上执行:

sudo nano /opt/seatunnel/config/seatunnel.yaml

在 Worker2 (192.168.192.133) 上也执行相同的操作:

sudo nano /opt/seatunnel/config/seatunnel.yaml

步骤 2:配置 Worker 节点​

删除文件原有内容,完整替换为以下配置(两个 Worker 节点配置完全相同):

seatunnel:
engine:
# 标识这是 Worker 节点
master-node: false

# 集群配置(与 Master 相同)
hazelcast:
cluster-name: seatunnel-cluster
network:
port: 5801
port-auto-increment: false
join:
multicast:
enabled: false
tcp-ip:
enabled: true
member-list: |
192.168.192.131:5801
192.168.192.132:5801
192.168.192.133:5801

步骤 3:保存配置文件​

在 nano 编辑器中:

  1. 按 Ctrl + O 保存
  2. 按 Enter 确认
  3. 按 Ctrl + X 退出

注意:Worker 节点不需要配置 checkpoint 和 http 部分


五、启动集群​

方式 1:前台启动(适合调试)​

Master 节点:

cd /opt/seatunnel
./bin/seatunnel.sh --master

Worker 节点(分别在 121 和 122 上执行):

cd /opt/seatunnel
./bin/seatunnel.sh --worker

方式 2:后台启动(简单实用)​

Master 节点:

cd /opt/seatunnel
nohup ./bin/seatunnel.sh --master > /var/log/seatunnel/startup.log 2>&1 &

# 查看进程
ps aux | grep seatunnel

Worker 节点:

cd /opt/seatunnel
nohup ./bin/seatunnel.sh --worker > /var/log/seatunnel/startup.log 2>&1 &

方式 3:Systemd 管理(推荐,可开机自启)​

Master 节点创建服务文件 /etc/systemd/system/seatunnel-master.service:

[Unit]
Description=SeaTunnel Master
After=network.target

[Service]
Type=forking
User=root
Environment="JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64"
ExecStart=/opt/seatunnel/bin/seatunnel.sh --master
ExecStop=/opt/seatunnel/bin/stop.sh
Restart=on-failure
RestartSec=10

[Install]
WantedBy=multi-user.target

Worker 节点创建服务文件 /etc/systemd/system/seatunnel-worker.service:

[Unit]
Description=SeaTunnel Worker
After=network.target

[Service]
Type=forking
User=root
Environment="JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64"
ExecStart=/opt/seatunnel/bin/seatunnel.sh --worker
ExecStop=/opt/seatunnel/bin/stop.sh
Restart=on-failure
RestartSec=10

[Install]
WantedBy=multi-user.target

启动服务(所有节点):

# 重载 systemd
sudo systemctl daemon-reload

# 启动服务
sudo systemctl start seatunnel-master # Master 节点
sudo systemctl start seatunnel-worker # Worker 节点

# 设置开机自启
sudo systemctl enable seatunnel-master
sudo systemctl enable seatunnel-worker

# 查看状态
sudo systemctl status seatunnel-master
sudo systemctl status seatunnel-worker

六、验证集群​

启动完成后,在 Master 节点上执行以下验证步骤:

1. 检查集群成员​

在 Master 节点执行:

# 查看集群成员
curl http://192.168.192.131:8080/hazelcast/cluster-members

# 预期看到 3 个成员
# Members [3] {
# Member [192.168.192.131]:5801 - this
# Member [192.168.192.132]:5801
# Member [192.168.192.133]:5801
# }

2. 查看日志​

# 实时查看日志
tail -f /opt/seatunnel/logs/seatunnel-engine.log

# 查看启动日志
tail -100 /opt/seatunnel/logs/seatunnel-engine.log

3. 访问 Web UI​

浏览器访问:http://192.168.192.131:8080

  • 用户名:admin
  • 密码:admin123

七、提交测试作业​

集群验证成功后,可以提交一个简单的测试作业。在 Master 节点上执行:

创建测试作业文件​

在 Master 节点创建 /opt/seatunnel/jobs/test.conf:

env {
parallelism = 2
job.mode = "BATCH"
job.name = "test-job"
}

source {
FakeSource {
result_table_name = "fake"
row.num = 1000
schema = {
fields {
id = int
name = string
}
}
}
}

sink {
Console {
source_table_name = "fake"
}
}

提交作业​

# 通过 REST API 提交
curl -X POST http://192.168.192.131:8080/submit-job \
-F "config_file=@/opt/seatunnel/jobs/test.conf" \
-F "jobName=test-job"

# 查看运行中的作业
curl http://192.168.192.131:8080/running-jobs

# 停止作业(替换 <jobId> 为实际 ID)
curl -X POST http://192.168.192.131:8080/stop-job \
-H "Content-Type: application/json" \
-d '{"jobId": <jobId>, "isStopWithSavePoint": false}'

八、日常运维​

1. 启停服务​

# 使用 systemd(推荐)
sudo systemctl start|stop|restart|status seatunnel-master # Master
sudo systemctl start|stop|restart|status seatunnel-worker # Worker

# 或直接使用脚本
/opt/seatunnel/bin/seatunnel.sh --master # 启动 Master
/opt/seatunnel/bin/seatunnel.sh --worker # 启动 Worker
/opt/seatunnel/bin/stop.sh # 停止

2. 查看状态​

# 检查集群成员
curl http://192.168.192.131:8080/hazelcast/cluster-members

# 检查作业状态
curl http://192.168.192.131:8080/running-jobs

# 查看日志
tail -f /opt/seatunnel/logs/seatunnel-engine.log

3. 常见问题​

问题 1:Worker 无法连接 Master

# 检查网络
telnet 192.168.192.131 5801

# 检查防火墙
sudo systemctl status firewalld

# 检查 hosts 配置
cat /etc/hosts

问题 2:作业提交失败

# 检查 Master 是否正常运行
curl http://192.168.192.131:8080/running-jobs

# 查看错误日志
grep -i "error" /opt/seatunnel/logs/seatunnel-engine.log | tail -20

问题 3:Checkpoint 失败

# 检查磁盘空间
df -h /data/seatunnel

# 清理旧 checkpoint
rm -rf /data/seatunnel/checkpoint/*

九、配置说明​

Master 节点特有配置​

配置项说明Worker 是否需要
master-node: true标识为主节点❌
checkpointCheckpoint 存储❌
httpWeb UI 和 API❌
hazelcast集群通信✅ 需要

Worker 节点配置要点​

  1. master-node: false - 标识为工作节点
  2. hazelcast 配置必须与 Master 完全一致
  3. 不需要配置 checkpoint 和 http 部分
  4. 集群成员列表要包含所有节点

JVM 参数(可选优化)​

如果需要调整 JVM 参数,编辑 /opt/seatunnel/config/seatunnel-env.sh:

# Master 节点(调度为主,8G 足够)
export JAVA_OPTS="-Xms4g -Xmx8g -XX:+UseG1GC"

# Worker 节点(执行为主,根据任务调整)
export JAVA_OPTS="-Xms8g -Xmx16g -XX:+UseG1GC"

十、Checkpoint 存储方案对比与选择​

SeaTunnel 支持两种 Checkpoint 存储方案:本地存储 和 S3 存储。以下是详细对比:

方案对比​

特性本地存储S3 存储
配置复杂度⭐⭐⭐⭐⭐ 简单⭐⭐⭐ 中等
成本⭐⭐⭐⭐ 低⭐⭐⭐ 中等
可靠性⭐⭐ 单点故障风险⭐⭐⭐⭐⭐ 多副本高可靠
扩展性⭐⭐ 受限于单机磁盘⭐⭐⭐⭐⭐ 弹性扩展
性能⭐⭐⭐⭐⭐ 本地 I/O 快⭐⭐⭐ 依赖网络
共享访问❌ 无法跨节点✅ 所有节点可访问
适用场景测试/开发/PoC生产环境

方案 A:本地存储配置(适合测试)​

优点:

  • ✅ 配置简单,无需额外服务
  • ✅ 性能好(本地磁盘 I/O)
  • ✅ 零成本

缺点:

  • ❌ 单点故障风险
  • ❌ 空间受限
  • ❌ 无法跨节点共享

完整配置示例(Master 节点):

seatunnel:
engine:
master-node: true

hazelcast:
cluster-name: seatunnel-cluster
network:
port: 5801
port-auto-increment: false
join:
multicast:
enabled: false
tcp-ip:
enabled: true
member-list: |
192.168.192.131:5801
192.168.192.132:5801
192.168.192.133:5801

# Checkpoint 配置 - 使用本地存储
checkpoint:
interval: 300000
timeout: 60000
storage:
type: local
max-retained: 3
plugin-config:
storage.type: local
namespace: "/data/seatunnel/checkpoint"

# Savepoint 配置
savepoint:
storage:
type: local
plugin-config:
storage.type: local
namespace: "/data/seatunnel/savepoint"

http:
enable-http: true
port: 8080
enable-basic-auth: true
basic-auth-username: "admin"
basic-auth-password: "admin123"

目录准备:

# 在所有节点创建目录
mkdir -p /data/seatunnel/{checkpoint,savepoint,tmp}

# 确保有足够空间(每个作业 10-50GB)
df -h /data

# 设置权限
chown -R seatunnel:seatunnel /data/seatunnel

验证配置:

# 启动后检查日志
tail -f /opt/seatunnel/logs/seatunnel-engine.log | grep -i checkpoint

# 预期看到
# "Checkpoint storage initialized to /data/seatunnel/checkpoint"

方案 B:S3 存储配置(推荐生产)​

为什么使用 S3 存储?​

对比项本地存储S3 存储
可靠性单点故障风险多副本,高可靠
可用性依赖单机磁盘分布式存储
扩展性受限于单机容量弹性扩展
共享访问无法跨节点共享所有节点可访问
适用场景测试/开发生产环境

前置条件​

  1. 已有 S3 兼容存储服务,例如:

    • MinIO(自建,推荐)
    • AWS S3
    • 阿里云 OSS
    • 腾讯云 COS
  2. 已创建 Bucket,例如:seatunnel-checkpoint

  3. 已获取访问凭证:

    • Access Key
    • Secret Key
    • Endpoint 地址

配置步骤​

步骤 1:准备 S3 环境​

以 MinIO 为例(假设部署在 192.168.192.111:9000):

# 1. 创建 Bucket
# 通过 MinIO Console 或 mc 客户端
mc mb myminio/seatunnel-checkpoint

# 2. 创建访问用户
# 推荐使用独立用户,只授予该 Bucket 的读写权限
mc admin user add myminio seatunnel-user YourPassword

# 3. 设置策略
mc admin policy set myminio readwrite user=seatunnel-user
步骤 2:修改 Master 节点配置​

编辑 /opt/seatunnel/config/seatunnel.yaml:

seatunnel:
engine:
master-node: true

hazelcast:
# ... 其他配置保持不变 ...

checkpoint:
interval: 300000
timeout: 60000
storage:
type: s3
max-retained: 3
plugin-config:
storage.type: s3
namespace: "/seatunnel/checkpoint"
s3.bucket: "s3a://seatunnel-checkpoint"
fs.defaultFS: "s3a://seatunnel-checkpoint"
fs.s3a.endpoint: "http://192.168.192.111:9000"
fs.s3a.path.style.access: true
fs.s3a.access.key: "seatunnel-user"
fs.s3a.secret.key: "YourPassword"
fs.s3a.aws.credentials.provider: org.apache.hadoop.fs.s3a.SimpleAWSCredentialsProvider
# 可选:连接池配置
fs.s3a.connection.maximum: 100
fs.s3a.connection.timeout: 60000
fs.s3a.socket.recv.buffer: 65536
fs.s3a.socket.send.buffer: 65536
步骤 3:验证 S3 连通性​

在 Master 节点上测试:

# 进入 SeaTunnel 目录
cd /opt/seatunnel

# 使用 AWS CLI 测试(如果已安装)
aws s3 ls s3://seatunnel-checkpoint \
--endpoint-url http://192.168.192.111:9000 \
--access-key seatunnel-user \
--secret-key YourPassword

# 或使用 curl 测试
curl -I http://192.168.192.111:9000/seatunnel-checkpoint
步骤 4:启动并验证​
# 重启 Master 节点
sudo systemctl restart seatunnel-master

# 查看日志确认 S3 初始化成功
tail -f /opt/seatunnel/logs/seatunnel-engine.log | grep -i "s3\|checkpoint"

# 预期看到类似日志
# "S3 storage initialized successfully"
# "Checkpoint storage configured to s3a://seatunnel-checkpoint/seatunnel/checkpoint"
步骤 5:提交作业触发 Checkpoint​
# 创建一个长时间运行的作业
cat > /opt/seatunnel/jobs/s3-test.conf <<EOF
env {
parallelism = 2
job.mode = "STREAMING"
checkpoint.interval = 30000 # 30 秒一次 checkpoint
job.name = "s3-checkpoint-test"
}

source {
FakeSource {
result_table_name = "fake_data"
row.num = 1000000
schema = {
fields {
id = int
name = string
timestamp = timestamp
}
}
}
}

sink {
Console {
source_table_name = "fake_data"
}
}
EOF

# 提交作业
curl -X POST http://192.168.192.131:8080/submit-job \
-F "config_file=@/opt/seatunnel/jobs/s3-test.conf" \
-F "jobName=s3-checkpoint-test"

# 等待几分钟后,检查 S3 中是否有 Checkpoint 文件
# 登录 MinIO Console 查看

不同 S3 服务商配置示例​

1. MinIO(自建)​
plugin-config:
storage.type: s3
namespace: "/seatunnel/checkpoint"
s3.bucket: "s3a://seatunnel-checkpoint"
fs.defaultFS: "s3a://seatunnel-checkpoint"
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
2. AWS S3​
plugin-config:
storage.type: s3
namespace: "/seatunnel/checkpoint"
s3.bucket: "s3a://your-bucket-name"
fs.defaultFS: "s3a://your-bucket-name"
fs.s3a.endpoint: "s3.us-east-1.amazonaws.com" # 根据区域调整
fs.s3a.access.key: "YOUR_AWS_ACCESS_KEY"
fs.s3a.secret.key: "YOUR_AWS_SECRET_KEY"
fs.s3a.aws.credentials.provider: org.apache.hadoop.fs.s3a.SimpleAWSCredentialsProvider
fs.s3a.impl: org.apache.hadoop.fs.s3a.S3AFileSystem
3. 阿里云 OSS​
plugin-config:
storage.type: s3
namespace: "/seatunnel/checkpoint"
s3.bucket: "s3a://your-bucket-name"
fs.defaultFS: "s3a://your-bucket-name"
fs.s3a.endpoint: "oss-cn-hangzhou.aliyuncs.com"
fs.s3a.access.key: "YOUR_ALIYUN_ACCESS_KEY"
fs.s3a.secret.key: "YOUR_ALIYUN_SECRET_KEY"
fs.s3a.aws.credentials.provider: org.apache.hadoop.fs.s3a.SimpleAWSCredentialsProvider
fs.s3a.impl: org.apache.hadoop.fs.s3a.S3AFileSystem
fs.s3a.connection.ssl.enabled: false
4. 腾讯云 COS​
plugin-config:
storage.type: s3
namespace: "/seatunnel/checkpoint"
s3.bucket: "s3a://your-bucket-name"
fs.defaultFS: "s3a://your-bucket-name"
fs.s3a.endpoint: "cos.ap-guangzhou.myqcloud.com"
fs.s3a.access.key: "YOUR_TENCENT_ACCESS_KEY"
fs.s3a.secret.key: "YOUR_TENCENT_SECRET_KEY"
fs.s3a.aws.credentials.provider: org.apache.hadoop.fs.s3a.SimpleAWSCredentialsProvider
fs.s3a.impl: org.apache.hadoop.fs.s3a.S3AFileSystem

常见问题排查​

问题 1:连接 S3 失败

# 检查网络连通性
telnet 192.168.192.111 9000

# 检查 Bucket 是否存在
curl http://192.168.192.111:9000/seatunnel-checkpoint

# 检查凭证
aws s3 ls s3://seatunnel-checkpoint \
--endpoint-url http://192.168.192.111:9000 \
--access-key seatunnel-user \
--secret-key YourPassword

问题 2:写入权限不足

确保 S3 用户有以下权限:

  • s3:ListBucket
  • s3:PutObject
  • s3:GetObject
  • s3:DeleteObject

MinIO 策略示例:

{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": ["s3:*"],
"Resource": ["arn:aws:s3:::seatunnel-checkpoint/*"]
}
]
}

问题 3:Checkpoint 写入慢

优化建议:

  1. 增加网络连接数
  2. 调整缓冲区大小
  3. 使用更靠近的 S3 端点
  4. 检查网络带宽
# 优化配置
fs.s3a.connection.maximum: 200
fs.s3a.connection.timeout: 120000
fs.s3a.socket.recv.buffer: 131072
fs.s3a.socket.send.buffer: 131072
fs.s3a.fast.upload: true
fs.s3a.fast.upload.buffer: "bytebuffer"

十一、扩展示例​

增加 Worker 节点​

如果要增加第 4 个节点作为 Worker3:

  1. 在新节点安装 SeaTunnel
  2. 修改所有节点的配置 - 在 member-list 中添加新节点
  3. 启动新节点的 Worker
# 所有节点的 member-list 更新为:
member-list: |
192.168.192.131:5801
192.168.192.132:5801
192.168.192.133:5801
192.168.192.123:5801 # 新增

然后重启所有节点即可。


参考资源​