Apache SeaTunnel 은 서로 다른 시스템 사이에서 데이터를 옮기는 데이터 통합 엔진이다. 2017년 Waterdrop 이라는 이름으로 시작해 2021년 Apache 인큐베이터에 들어갔고 2023년 톱레벨 프로젝트가 됐다. 배치와 스트리밍을 같은 설정 모델로 다루며, 커넥터를 꽂아 소스와 싱크를 늘린다.
코드를 쓰지 않고 설정 파일로 파이프라인을 정의한다는 점이 특징이다. 한 파일 안에 env, source, transform, sink 블록을 두고 실행한다.
source ──▶ transform ──▶ sink
(읽기) (변환, 선택) (쓰기)
| 계열 | 상태 |
|---|---|
| 2.3 | 현행. 최신 2.3.13[1] |
SeaTunnel 은 파이프라인을 세 가지 엔진 중 하나 위에서 돌린다.
| 엔진 | 쓰는 자리 |
|---|---|
| Zeta | SeaTunnel 자체 엔진. Spark · Flink 클러스터가 없어도 단독으로 돈다. 2.3 계열의 기본 선택지 |
| Spark | 이미 Spark 클러스터가 있고 그 자원 관리를 그대로 쓰고 싶을 때 |
| Flink | 이미 Flink 클러스터가 있을 때 |
Zeta 를 쓰면 데이터 통합만을 위해 Spark 나 Flink 를 세울 필요가 없다. 반대로 기존 클러스터의 스케줄링 · 모니터링 체계를 그대로 쓰고 싶으면 Spark · Flink 모드를 고른다.
HOCON 형식이다.
env {
parallelism = 2
job.mode = "BATCH"
}
source {
Jdbc {
url = "jdbc:postgresql://db.example.com:5432/appdb"
driver = "org.postgresql.Driver"
user = "${DB_USER}"
password = "${DB_PASSWORD}"
query = "select id, name, updated_at from public.customer"
plugin_output = "customer"
}
}
transform {
Filter {
plugin_input = "customer"
include_fields = ["id", "name"]
plugin_output = "customer_trimmed"
}
}
sink {
Console {
plugin_input = "customer_trimmed"
}
}
./bin/seatunnel.sh --config ./config/job.conf -m local
(확인 필요) — 블록 사이를 잇는 키 이름은 버전에 따라 달라졌다. 예전 문서에는 source_table_name · result_table_name 으로 나오고 이후 plugin_input · plugin_output 으로 바뀌었다. 쓰는 버전의 문서에 있는 이름을 그대로 따라야 한다.
자격 증명은 설정 파일에 직접 적지 않고 환경 변수나 비밀 저장소에서 주입한다.
NiFi 와 자주 비교된다. NiFi 는 흐름을 화면에서 그리고 파일 단위 흐름 제어와 라우팅에 강한 반면, SeaTunnel 은 테이블 · 레코드 단위의 대량 이동에 초점이 있고 설정 파일과 버전 관리에 친화적이다. 둘 다 있는 환경이라면 용도를 나눠 쓴다.
최신 버전 2.3.13 — 2026-09-20 확인. https://github.com/apache/seatunnel/releases/latest ↩︎