openetl-go

command module
v0.0.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 22, 2026 License: MIT Imports: 4 Imported by: 0

README

OpenETL-Go — 轻量级 ETL/CDC 引擎(单二进制)

OpenETL-Go 是一个单二进制、插件化的 ETL/CDC 引擎:Source → Transform → Sink。 支持 MySQL binlog / PostgreSQL 逻辑复制 / Kafka / 文件 / HTTP / Redis 作为源, ClickHouse / MySQL / PostgreSQL / Doris / Elasticsearch / Kafka / Redis / S3 / JDBC 作为目标。 单机用 SQLite(零外部依赖);可扩展用 MySQL/PostgreSQL 共享存储 + master-worker 分片。

能力一览

阶段 支持的连接器 / 算子
Source mysql_cdc(binlog)、mysql_snapshot_cdc(快照+增量衔接)、postgres_cdc(逻辑复制)、mysql_batchkafkaredis(SCAN)、http(分页+断点)、file(JSON/CSV)
Transform filter(表达式)、deduplicatevalidaterename/drop_field/add_fieldtype_convertenricherlookupjoinwindowrouter(条件路由)、fanouttaprate_limiterts;脚本扩展:lua(默认)、javascript(QuickJS)、WASM 插件
Sink clickhouse(自动建表+DDL 翻译)、mysql/postgres(批量+幂等 upsert)、doris(Stream Load)、kafka(幂等生产者)、elasticsearchrediss3/minio、jdbcfile
可靠性 at-least-once + 幂等 sink + DLQ 死信队列 + 三态断路器 + 指数退避重试 + checkpoint;零静默数据丢失(SPEC §6.1)
执行模式 线性 pipeline / DAG 多源多汇 / ParallelRunner 分片 / master-worker 真分布式(A11-redo 验证)
运维 REST API /api/v2/*、preflight 预检、Prometheus /metrics、JSON 结构化日志、SQLite/MySQL/PG 元存储、Web 管理界面

🚀 5 分钟快速开始

# 1. 启动依赖(MySQL 源 + ClickHouse 目标)
podman compose -f docker-compose.quickstart.yml up -d
# 2. 示例管道 MySQL CDC -> ClickHouse(自动建表)已在 pipes-quickstart/ 提供
#    也可以直接用: pipes/mysql-cdc-to-clickhouse.yaml
# 3. 打开管理界面: http://localhost:8000   (REST API: /api/v2/*)
  • 示例 spec:pipes-quickstart/mysql-to-clickhouse.yamlpipes/mysql-cdc-to-clickhouse.yaml
  • 完整入门:docs/quickstart.md

安装

从 Release 下载(推荐)

Releases 下载对应平台的压缩包(Linux/macOS/Windows × amd64/arm64),解压后:

./openetl-go                           # 默认读取 manifest/config/config.yaml
Docker
docker run -d --name openetl-go -p 8000:8000 -p 8001:8001 \
  -v "$PWD/pipes:/app/pipes" \
  ghcr.io/a8851625/openetl-go:latest
从源码构建
go build -o openetl-go .                # 默认构建(纯 Go,含 Lua)
# 可选运行时:
go build -tags=extism -o openetl-go .   # 启用 WASM 插件(wazero,纯 Go)
go build -tags=nolua -o openetl-go .    # 剥离 Lua 运行时,进一步瘦身
CGO_ENABLED=1 go build -o openetl-go .  # 启用 JavaScript/TypeScript transform(QuickJS,需 CGO)

构建标签

标签 效果 默认
(无) 纯 Go 核心 + 全部 sink + Lua;无 WASM、无 QuickJS、无 CGO
-tags=extism + WASM 插件运行时(wazero,纯 Go)
-tags=nolua 剥离 Lua 运行时(type:lua 返回清晰错误),进一步瘦身
CGO_ENABLED=1 + JavaScript/TypeScript transform(QuickJS,需 C 工具链)

运行模式

  • 单机(默认):SQLite 存储,零外部依赖,一个进程跑全部管道。
  • 可扩展:把 etl.storage.type 切到 mysql/postgresql,用 etl.role=master + 多个 etl.role=worker 跑真分布式分片(线性 spec 跨 worker 不重叠分发,worker 崩溃后分片重分配)。

最小配置见 manifest/config/config.yaml;详细字段见 docs/etl-config-schema.md

文档

贡献

CONTRIBUTING.md。改动前请先阅读 SPEC 的代码风格与测试约定(§3-§5);默认 -race 跑测试。

License

MIT,见 LICENSE

Documentation

The Go Gopher

There is no documentation for this package.

Directories

Path Synopsis
internal
cmd
etl/sink/ddl
Package ddl provides DDL statement translation between SQL dialects.
Package ddl provides DDL statement translation between SQL dialects.
etl/sink/typing
Package typing provides a unified type mapping engine for converting between source column types and sink DDL types.
Package typing provides a unified type mapping engine for converting between source column types and sink DDL types.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL