New in Bruin Cloud

Cloud Streams: CDC database replication

CDC used to take Kafka, Debezium and a week. Now it's 1 click.

Every insert, update and delete, from your database to your warehouse.

Trusted by forward-thinking teams

How it works

Turn it on once. It keeps up from there.

  1. Once

    Turn on your database's change log.

    Logical replication on Postgres, a row-based binlog on MySQL, CDC on SQL Server.

  2. 1 click

    Start the stream in Bruin Cloud.

    Bruin copies each table once, then follows the log.

  3. Continuous

    Every change streams into your warehouse.

    One stream that keeps running. Not scheduled batches.

Compared

CDC without the Kafka cluster.

How Bruin Cloud Streams compares with building CDC on Kafka and Debezium, and with Fivetran or Airbyte.
QuestionKafka + Debezium, built yourselfFivetran or AirbyteBruin Cloud Streams
What you runKafka, Kafka Connect, Debezium and a sink connectorNothingNothing
SetupDays to weeksA setup wizard per source1 click, once the change log is on
How changes arriveA continuous streamScheduled batch syncs. Fivetran's 1-minute syncs need its Enterprise planOne continuous stream
Run the engine yourselfYesAirbyte: yes. Fivetran: noYes, with ingestr

What it handles

The parts that usually break, handled.

$ ingestr ingest --source-uri postgres+cdc://… --stream

  1. snapshot · public.orders1.2M rows
  2. streaming · WALmerge on id
  3. connection lost14:02:11
  4. resumed · 0/1A3F2B814:02:40

Picked up where it stopped. Nothing skipped.

Deletes

Kept and flagged with _cdc_deleted, or removed. Your call.

New columns

A column added in Postgres reaches the warehouse without a restart.

Your tables

Stream the whole database, or only the tables you name.

Full refresh

Rebuild a table from a fresh copy while the stream keeps running.

Lag you can see

Bruin Cloud tracks how far behind each stream is, and alerts you.

Same engine

Runs on ingestr. Run it yourself, too.

Cloud Streams runs ingestr's CDC. The same stream works from your laptop or CI with one command.

# The same stream, from your own machine
ingestr ingest \
  --source-uri 'postgres+cdc://user:***@host:5432/shop' \
  --dest-uri 'bigquery://my-project?credentials_path=sa.json' \
  --stream

The platform

Part of the Bruin platform.

Streams land as raw tables, ready for your SQL models, quality checks and lineage.

Frequently asked

Questions about Cloud Streams.

What is change data capture (CDC)?

CDC copies every insert, update and delete from a database's own change log, instead of re-querying its tables. Bruin Cloud Streams uses it to keep your warehouse in sync with production.

Do I need Kafka or Debezium to use Bruin Cloud Streams?

No. Bruin reads the database log directly and merges each change into your warehouse, so there is no Kafka cluster or connector to run.

What do I need to set up on my database before streaming with Bruin?

Turn on the change log once: logical replication and a replication user on Postgres, a row-based binlog on MySQL, CDC or Change Tracking on SQL Server, a replica set or Atlas cluster on MongoDB. On managed databases such as AWS RDS this is a parameter change that can need a restart.

Which databases and warehouses does Bruin Cloud Streams support?

It reads PostgreSQL, MySQL, MariaDB, SQL Server, MongoDB, Vitess and PlanetScale from their own change logs, and writes to BigQuery, Snowflake, StarRocks, PostgreSQL, MySQL, SQL Server and DuckDB, among others. MySQL and MariaDB streams need a destination that enforces primary keys, so not BigQuery or Snowflake.

Does Bruin Cloud Streams slow down my production database?

The first sync copies each table once. After that, Bruin reads the database's change log instead of querying your tables again.

How fresh is the data that Bruin streams into my warehouse?

Continuously. Bruin Cloud Streams is a stream, not a scheduled batch load, so changes keep flowing into your warehouse instead of waiting for the next sync.

How does Bruin Cloud Streams handle deleted rows?

By default a deleted row stays in the warehouse with _cdc_deleted set to true, so you keep its last values. Switch to hard deletes and the row is removed.

What happens if a Bruin stream stops or the warehouse is down?

The stream resumes from the last change it saved, so nothing is skipped. Delivery is at-least-once and changes are merged by primary key, so on tables with a primary key a replay doesn't create duplicate rows.

Will a stalled Bruin stream fill up my Postgres disk with WAL?

A Postgres replication slot keeps WAL until the stream confirms it, so a stalled stream does make the log grow. Bruin Cloud tracks how far behind each stream is, in WAL bytes for Postgres, and alerts you when it falls behind.

Can Bruin replicate tables without a primary key?

Bruin mirrors tables by primary key. On Postgres, a keyless table with REPLICA IDENTITY FULL is captured as an append-only change log instead; other databases skip keyless tables with a warning.

What happens when someone adds or changes a column in Postgres?

A running stream picks up the change and updates the warehouse table without a restart. Dropped columns stay in the warehouse as empty columns.

How is Bruin Cloud Streams different from Fivetran or Airbyte?

Fivetran and Airbyte copy changes in scheduled batches, and Fivetran's 1-minute syncs need its Enterprise plan. Cloud Streams is one continuous stream, on ingestr, an engine you can also run yourself.

Can I run the same CDC without Bruin Cloud?

Yes. ingestr ingest --stream runs the same stream on your own machine or servers; ingestr is source-available under the Functional Source License. Bruin Cloud keeps it running, tracks lag and alerts you.

Your warehouse, in sync with production.

A demo walks through your own data.

Sign up to our newsletter

Practical updates on open-source data pipelines, AI analysts, governance, and what we are shipping at Bruin.

The signup form is hosted by Brevo. Allow marketing cookies to load it.