Streambed: motor de CDC de Postgres a Iceberg en S3

Fuentes: GitHub - viggy28/streambed: Stream Postgres to Apache Iceberg on S3 via logical replication
Streambed: motor de CDC de Postgres a Iceberg en S3
Imagen generada con IA

Streambed es una herramienta de código abierto que replica cambios de PostgreSQL hacia Apache Iceberg en Amazon S3 mediante replicación lógica, permitiendo consultas analíticas sin modificar la aplicación original. Actúa como suscriptor de replicación lógica: captura los mensajes del WAL (insert, update, delete), los bufferiza por tabla y los vuelca periódicamente como archivos Parquet en S3, con metadatos de Iceberg. Las actualizaciones y eliminaciones se manejan con copy-on-write sobre los datos Parquet existentes. Incluye un servidor de consultas integrado que expone las tablas Iceberg mediante el protocolo wire de Postgres (puerto 5433), utilizando DuckDB embebido. Así, se puede consultar con psql o cualquier cliente Postgres. No requiere ETL ni Spark: basta con Postgres y S3. Ofrece comandos para sincronización continua (streambed sync), resincronización única (streambed resync), servidor de consultas independiente (streambed query) y limpieza de tablas (streambed cleanup). Es útil para descargar cargas analíticas pesadas de la base de datos de producción sin cambiar la aplicación: las consultas analíticas se redirigen al clon Iceberg, manteniendo la compatibilidad con el protocolo Postgres. Está escrito en Go 1.22+ con CGO (dependencias go-duckdb y go-sqlite3). Su arquitectura es simple: Postgres WAL → decode → buffer → Parquet → S3 → commit Iceberg; el servidor de consultas usa DuckDB para leer los datos. Streambed es adecuado para equipos que quieren desacoplar cargas analíticas sin introducir herramientas complejas de streaming ni motores pesados. Limitaciones: requiere S3 (o MinIO local), expone consistencia eventual durante la replicación y no es un reemplazo en tiempo real para consultas transaccionales. Alternativas: herramientas como Debezium, pero con menor sobrecarga operativa.