Streambed: Công cụ CDC chuyển dữ liệu Postgres sang Iceberg trên S3, không cần ETL hay Spark

Công nghệ31 tháng 5, 2026·3 phút đọc

Streambed là một engine CDC mã nguồn mở giúp chuyển đổi dữ liệu từ Postgres sang định dạng Iceberg trên S3. Công cụ này cho phép người dùng thực hiện các truy vấn phân tích mà không ảnh hưởng đến cơ sở dữ liệu sản xuất, hỗ trợ giao thức Postgres wire để kết nối dễ dàng.

Streambed: Công cụ CDC chuyển dữ liệu Postgres sang Iceberg trên S3, không cần ETL hay Spark

Streambed là một engine CDC (Change Data Capture) mới được giới thiệu trên Hacker News, giúp chuyển đổi dữ liệu từ Postgres sang định dạng Iceberg trên S3 một cách trực tiếp. Với giải pháp này, các nhà phát triển có thể dỡ tải (offload) các truy vấn phân tích khỏi cơ sở dữ liệu sản xuất mà không cần thay đổi cấu trúc ứng dụng hay thiết lập các pipeline ETL phức tạp.

License Apache 2.0License Apache 2.0

Giải pháp thay thế cho ETL truyền thống

Thông thường, để phân tích dữ liệu từ cơ sở dữ liệu giao dịch (OLTP), các kỹ sư thường phải sử dụng các công cụ như Spark hoặc thiết lập pipeline ETL để di chuyển dữ liệu sang kho dữ liệu (Data Warehouse). Streambed đơn giản hóa quy trình này bằng cách hoạt động như một người đăng ký sao chép logic (logical replication subscriber).

Công cụ này phát trực tiếp các thay đổi từ WAL (Write-Ahead Log) của Postgres, ghi dữ liệu thành các tệp Parquet lên S3 và cam kết (commit) metadata Iceberg. Điều này đảm bảo dữ liệu phân tích luôn được cập nhật gần như thời gian thực mà không gây áp lực lên database chính.

Cách thức hoạt động

Streambed thực hiện quy trình xử lý dữ liệu theo một luồng liên tục:

  1. Đọc WAL: Kết nối đến Postgres và nhận các thay đổi (insert, update, delete) thông qua logical replication.
  2. Giải mã và Bộ đệm: Giải mã các thông điệp WAL và lưu trữ hàng theo từng bảng trong bộ đệm.
  3. Ghi Parquet: Định kỳ đẩy dữ liệu từ bộ đệm lên S3 dưới dạng tệp Parquet và cập nhật metadata của Iceberg.
  4. Xử lý cập nhật: Các thao tác cập nhật và xóa được xử lý bằng cơ chế hợp nhất copy-on-write đối với dữ liệu Parquet hiện có.

Kiến trúc StreambedKiến trúc Streambed

Truy vấn dữ liệu dễ dàng với giao thức Postgres

Một trong những điểm nổi bật nhất của Streambed là máy chủ truy vấn (query server) tích hợp sẵn. Thay vì yêu cầu người dùng học các ngôn ngữ truy vấn mới hoặc công cụ riêng biệt, Streambed sử dụng DuckDB nhúng để hiển thị các bảng Iceberg thông qua giao thức Postgres wire.

Nhờ đó, bạn có thể kết nối và truy vấn dữ liệu bằng bất kỳ client Postgres nào, kể cả công cụ dòng lệnh quen thuộc như psql.

Quick Start với Docker và Go

Để bắt đầu với Streambed, bạn cần có Go 1.22+ và CGO. Quy trình cài đặt khá đơn giản:

Đầu tiên, khởi động Postgres và MinIO (một giải pháp lưu trữ tương thích S3) bằng Docker Compose:

docker compose up -d

Tiếp theo, biên dịch và chạy Streambed để bắt đầu đồng bộ hóa dữ liệu cũng như khởi động máy chủ truy vấn trên cổng 5433:

go build -o streambed ./cmd/streambed

./streambed sync \
--source-url="postgres://postgres:test@localhost:5432/postgres" \
--s3-bucket="streambed" \
--s3-endpoint="http://localhost:9000" \
--s3-prefix="test" \
--query-addr=:5433

Bây giờ, bạn có thể truy vấn các bảng Postgres của mình thông qua Iceberg ngay lập tức:

psql -h localhost -p 5433 -U postgres -d postgres

Streambed cũng cung cấp các lệnh hỗ trợ khác như resync để sao chép lại dữ liệu (backfill), query để chạy máy chủ truy vấn độc lập, và cleanup để dọn dẹp dữ liệu trên S3. Đây là một công cụ hứa hẹn cho các đội ngũ phát triển muốn xây dựng hệ thống phân tích hiện đại mà không muốn gánh nặng vận hành của Spark hay các hệ thống ETL lớn.

Chia sẻ:FacebookX
Nội dung tổng hợp bằng AI, mang tính tham khảo. Xem bài gốc ↗