Show HN: Streambed – 将Postgres流式传输到S3上的Iceberg,支持Postgres Wire协议
摘要
Streambed是一个开源的CDC引擎,它将Postgres的WAL变更流式传输到S3上的Iceberg表,并内置了一个使用DuckDB的查询服务器,该服务器支持Postgres wire协议。
查看缓存全文
缓存时间: 2026/05/31 19:36
viggy28/streambed
来源:https://github.com/viggy28/streambed
Streambed
CI (https://github.com/viggy28/streambed/actions/workflows/ci.yml) Go 参考 (https://pkg.go.dev/github.com/viggy28/streambed) 许可证
Postgres 到 Iceberg 的 CDC 引擎。将分析查询从生产数据库卸载,无需修改应用程序。
streambed 通过逻辑复制流式传输 WAL 变更,将 Parquet 文件写入 S3,并提交 Iceberg 元数据。使用任何兼容 Iceberg 的引擎查询结果——或者使用内置的查询服务器,该服务器支持 Postgres 线协议,因此你可以用 psql 连接。
实际效果
在 pgbench(100 万个账户,50 万行历史记录)上执行相同的分析查询。左侧是 Postgres,右侧是 Streambed。
演示
无需 ETL,无需 Spark。只需 Postgres + S3。
快速开始
# 本地启动 Postgres + MinIO
docker compose up -d
# 构建
go build -o streambed ./cmd/streambed
# 启动同步 + 查询服务器(监听 :5433)
./streambed sync \
--source-url="postgres://postgres:test@localhost:5432/postgres" \
--s3-bucket="streambed" \
--s3-endpoint="http://localhost:9000" \
--s3-prefix="test" \
--query-addr=:5433
# 通过 Iceberg 查询 Postgres 表
psql -h localhost -p 5433 -U postgres -d postgres
运行 streambed sync --help 查看所有配置选项。所有标志都支持带有 STREAMBED_ 前缀的环境变量(例如 STREAMBED_SOURCE_URL)。
架构
架构图
工作原理
Postgres WAL ──▶ 解码 ──▶ 缓冲 ──▶ Parquet ──▶ S3 ──▶ Iceberg 提交
│
DuckDB ◀──┘ (查询服务器)
Streambed 作为逻辑复制订阅者连接到 Postgres。它解码 WAL 消息(插入、更新、删除),按表缓冲行,并定期将它们刷新为 Parquet 文件并提交 Iceberg 元数据到 S3。更新和删除使用写时复制(copy-on-write)合并现有 Parquet 数据。
查询服务器使用嵌入式 DuckDB 通过 Postgres 线协议暴露 Iceberg 表,因此你可以用 psql 或任何 Postgres 客户端进行查询。
命令
| 命令 | 功能 |
|---|---|
streambed sync | 主守护进程。流式传输 WAL、写入 Iceberg,并可选择提供查询服务。 |
streambed resync --table=public.users | 使用一致快照通过 COPY 一次性回填。 |
streambed query | 独立查询服务器(无需同步)。指向现有的 Iceberg 表。 |
streambed cleanup --table=public.users | 删除表的 S3 对象和状态。在 resync 之前使用。 |
开发
需要 Go 1.22+ 和 CGO(用于 go-duckdb 和 go-sqlite3)。
# 构建
go build -o streambed ./cmd/streambed
# 单元测试
go test ./internal/... ./config/...
# 集成测试(需要 Docker)
./scripts/test-integration.sh
集成测试使用 integration 构建标签,并在 test/integration/docker-compose.yml 中定义的 Postgres(端口 5434)和 MinIO(端口 9002)上运行。
相似文章
将Postgres数据以Parquet格式存储在S3上:LTAP架构解析
Databricks推出Lakebase LTAP架构,将Postgres数据以Parquet格式存储在S3上,无需CDC或镜像即可在单份数据上实现事务与分析。
开发了一个将Microsoft SQL Server变更流式传输到Apache Kafka的工具
Athena是一个轻量级变更数据捕获(CDC)工具,用于将Microsoft SQL Server的变更流式传输到Apache Kafka。它使用Golang构建,设置比Debezium更简单,并能自动管理CDC配置。
Tidebase: 开源的身份认证、凭证代理、检查点、队列、调度和网关,用于你的代理,在你自己的Postgres中。
Tidebase 是一个开源工具,为AI代理提供身份认证、凭证代理、检查点、队列、调度和网关,全部基于Postgres。
Snowflake Postgres、Lakebase、HorizonDB:选择你需要的锁定模式
对三种新型兼容 Postgres 的云端数据库——Snowflake Postgres、Databricks Lakebase 和 Azure HorizonDB——的分析,重点介绍了它们截然不同的架构,以及它们对企业数据平台带来的供应商锁定影响。
PostgresBench: 一个可复现的 Postgres 服务基准测试
ClickHouse 发布了 PostgresBench,这是一个公开且可复现的基准测试,用于比较托管式 Postgres 服务,它使用标准的 pgbench 工具,在多个缩放因子下运行类似 TPC-B 的工作负载。