Compare

How Fabric stacks up against the way you're doing it today

Point-by-point, against the three ways teams actually run CDC today: hand-assembled, managed ELT, or a broad-connector platform. Same honesty the FAQ trades on, extended to a full comparison.

01

DIY: Debezium + Kafka Connect + a hand-written writer

The decode paths are the same ones Fabric uses under the hood, so this works. What you're signing up for is running and upgrading Kafka, Kafka Connect, a schema registry, and a custom Iceberg writer with compaction bolted on — five services to keep alive instead of one.

02

Managed ELT (Fivetran-style)

Proven, and it never touches your VPC: your database credentials and every row of change data route through their infrastructure. You also don't choose your table format — you get whatever they've decided to support, and a per-row bill that grows independently of your actual data volume.

03

Broad-connector platforms (Airbyte-style)

A bigger connector catalog, community-maintained and uneven in quality across sources. Fabric ships fewer connectors today, first-party and maintained to one contract, on a connector SDK — the same path that lets us build a custom one for a source we haven't shipped yet, without asking you to wait on a community PR.

Spec by spec

What you operate yourself

The pipelines run without you installing or babysitting infrastructure.

Fabric — hosted

Fabric — hosted — Yes: We run it; you bring credentials

The hosted plans run the control plane, the runners and the maintenance for you. You bring the source and destination credentials and configure the pipelines.

Fabric — self-hosted

Fabric — self-hosted — Partial: One Helm chart, your cluster

Self-hosted is one Helm chart into the Kubernetes cluster you already run; nothing else to install, but the cluster and the upgrades are yours to operate.

Fivetran

Fivetran — Yes: Fully managed; hybrid on Enterprise

Connectors run on Fivetran's cloud, so there is nothing to install. Hybrid Deployment moves the data path into your network on Enterprise or Business Critical plans.

https://fivetran.com/docs/core-concepts/deployment-models/hybrid-deployment

Debezium + Tableflow on Confluent Cloud

Debezium + Tableflow on Confluent Cloud — Partial: Managed, or run Connect yourself

Fully managed Debezium connectors, the Kafka cluster and Tableflow on Confluent Cloud; the cluster and its connectors are settings you own, and self-managed Kafka Connect is the other route.

https://docs.confluent.io/cloud/current/connectors/networking/internet-resource.html

Estuary

Estuary — Partial: Managed, BYOC, or private

Public deployments are fully managed by Estuary; BYOC and Private put the processing in your own cloud or network, which you then operate.

https://docs.estuary.dev/getting-started/deployment-options

DIY

DIY — No: You run every service

Kafka, Kafka Connect, the Debezium connectors and a writer of your own — every one deployed, tuned and upgraded by you.

https://debezium.io/documentation/reference/stable/architecture.html

Where the data and credentials go

Credentials and row data stay in your control, not in a vendor's copy.

Fabric — hosted

Fabric — hosted — Partial: Encrypted; rows in memory

Rows land in your own destination account, and the runner holds changes in memory until the commit. Credentials are stored encrypted and the runner decrypts them to connect — a vendor-run runner transits your rows.

Fabric — self-hosted

Fabric — self-hosted — Yes: Never leaves your network

The self-hosted chart runs in your VPC against your object storage: credentials and row data never leave your network.

Fivetran

Fivetran — No: On Fivetran's cloud

Connectors run on servers in Fivetran's regions. Hybrid Deployment keeps the data path inside your network, on Enterprise or Business Critical plans.

https://fivetran.com/docs/destinations

Debezium + Tableflow on Confluent Cloud

Debezium + Tableflow on Confluent Cloud — Partial: Public egress or PrivateLink

Confluent runs the connector; it reaches your database over public egress, PrivateLink or VPC peering — or you run Kafka Connect yourself.

https://docs.confluent.io/cloud/current/connectors/networking/internet-resource.html

Estuary

Estuary — Partial: Public cloud; BYOC, private

Public deployments process on Estuary's cloud; BYOC and Private keep data and processing inside your own cloud or network.

https://docs.estuary.dev/getting-started/deployment-options

DIY

DIY — Yes: Your own network throughout

Every service sits in infrastructure you own; nothing routes through a vendor's copy.

https://kafka.apache.org/43/kafka-connect/user-guide/

Destinations and table formats

You pick the destination table format per pipeline.

Fabric

Fabric — Yes: 5 sinks, format per pipeline

Iceberg (including S3 Tables), Delta Lake, Snowflake, ClickHouse or Postgres — chosen per pipeline.

Fivetran

Fivetran — Partial: Warehouses, databases and lakes

Warehouses, databases and lakes; managed lake tables are always Iceberg, with Delta metadata as an option — the format follows the destination, not a per-pipeline choice.

https://fivetran.com/docs/managed-data-lake-service

Debezium + Tableflow on Confluent Cloud

Debezium + Tableflow on Confluent Cloud — Partial: Topics first; Tableflow makes tables

Debezium writes to Kafka topics; a sink connector or Tableflow — Iceberg or Delta — is what materializes tables.

https://docs.confluent.io/cloud/current/topics/tableflow/overview.md

Estuary

Estuary — Partial: Warehouses, databases and lakes

Its own materializations into warehouses, databases and lakes; Iceberg through a dedicated connector.

https://docs.estuary.dev/reference/Connectors/materialization-connectors/

DIY

DIY — No: Whatever you build

Debezium lands changes in Kafka topics; the sink connector that turns them into table files — the writer, and its format — is yours to build and run.

https://debezium.io/documentation/reference/stable/architecture.html

Table maintenance

Compaction, snapshot expiry and cleanup run without a job you own.

Fabric

Fabric — Yes: Built in, scheduled hourly

Compaction, snapshot expiry and orphan-file cleanup are built in and scheduled per source.

Fivetran

Fivetran — Partial: Automatic on managed lakes

For managed lake tables, snapshot expiry, delete-marker removal and orphan-file cleanup are automatic.

https://fivetran.com/docs/managed-data-lake-service

Debezium + Tableflow on Confluent Cloud

Debezium + Tableflow on Confluent Cloud — Partial: Tableflow compacts; sinks vary

Kafka log compaction is opt-in, and destination table maintenance belongs to the writer — Tableflow or your own job.

https://docs.confluent.io/platform/current/installation/configuration/topic-configs.html

Estuary

Estuary — Partial: Yours, unless Glue optimizers

Regular maintenance of materialized tables is yours to run unless a Glue optimizer is configured.

https://docs.estuary.dev/reference/Connectors/materialization-connectors/apache-iceberg

DIY

DIY — No: A job you write and run

Iceberg puts the maintenance procedures in your hands: compaction, snapshot expiry and orphan-file cleanup are run, and scheduled, by you.

https://iceberg.apache.org/docs/latest/maintenance/

Schema evolution

New columns land without a rebuild of the table.

Fabric

Fabric — Yes: Additive-only, no restart

Additive-only: new columns land nullable, types are never retyped, and a source ADD COLUMN flows through without a restart. (A MySQL DDL across downtime needs a reset; live DDL does not.)

Fivetran

Fivetran — Partial: New columns; table re-syncs

New source columns are added to the destination automatically, which triggers a re-import or incremental sync of the table.

https://fivetran.com/docs/destinations

Debezium + Tableflow on Confluent Cloud

Debezium + Tableflow on Confluent Cloud — Partial: Registry governs; Tableflow applies

Schema changes go through Schema Registry, change events carry new columns, and Tableflow applies adds, removals and type widening.

https://docs.confluent.io/cloud/current/topics/tableflow/overview.md

Estuary

Estuary — Yes: Automatic adds; NULL history

New fields are added automatically; historical rows show NULL for them.

https://docs.estuary.dev/guides/schema-evolution

DIY

DIY — No: Your writer's job

Debezium emits the schema change; applying adds, removals and type changes to the destination tables is your writer's job.

https://debezium.io/documentation/reference/stable/connectors/mysql.html

Freshness

Changes reach the table on a schedule measured in seconds.

Fabric

Fabric — Yes: Every 30 seconds by default

Commits every 30 seconds by default, set per source — Snowflake and ClickHouse have higher floors.

Fivetran

Fivetran — Partial: 15 minutes by default

Databases sync every 15 minutes by default (six hours for other sources), configurable from one minute to 24 hours — the one-minute end needs Enterprise or Business Critical.

https://fivetran.com/docs/connectors/databases

Debezium + Tableflow on Confluent Cloud

Debezium + Tableflow on Confluent Cloud — Partial: Tableflow commits every ~5 min

Debezium streams changes in near real-time; Tableflow publishes them to the table approximately every five minutes.

https://docs.confluent.io/cloud/current/topics/tableflow/overview.md

Estuary

Estuary — Partial: Continuous capture, 30-minute commits

Captures run continuously; warehouse materializations commit on a 30-minute schedule by default.

https://docs.estuary.dev/reference/materialization-sync-schedule

DIY

DIY — Partial: As fast as you tune it

Debezium tails the log in near real-time; the commit cadence, buffering and sink tuning are yours to build.

https://debezium.io/documentation/reference/stable/connectors/postgresql.html

Transforms

Rows can be shaped in flight without extra infrastructure.

Fabric

Fabric — Partial: Python per table; rows count twice

Per-table Python transforms run in a fresh sandbox on every flush, on Pro and Enterprise; a transformed row is counted twice.

Fivetran

Fivetran — Partial: In the destination, via dbt

Transforms run downstream in the destination, through dbt or Coalesce — a project you bring.

https://fivetran.com/docs/transformations

Debezium + Tableflow on Confluent Cloud

Debezium + Tableflow on Confluent Cloud — Partial: SMTs; Flink SQL beyond

Single-message transforms handle simple edits; anything heavier needs Flink SQL, ksqlDB or Kafka Streams.

https://docs.confluent.io/cloud/current/connectors/single-message-transforms.html

Estuary

Estuary — Partial: Inline SQL, Python, TypeScript

Derivations run inline as data moves, in SQL, Python or TypeScript — Python on private/BYOC data planes only.

https://docs.estuary.dev/concepts/derivations

DIY

DIY — Partial: SMTs; Streams beyond

Single-message transforms make lightweight, per-message edits — field-level operations you configure; stateful stream processing is a separate library you deploy and run.

https://debezium.io/documentation/reference/stable/transformations/index.html

Replays and row-level correctness

No committed write is lost, and a replay is handled for you.

Fabric

Fabric — Yes: Checkpoint after commit

A write is checkpointed only after the commit lands, so nothing acked is ever lost. A replay after a crash is deduped per sink: upsert keys on Postgres and ClickHouse, deterministic staged files on Snowflake, and __source_offset order on Iceberg and Delta.

Fivetran

Fivetran — Yes: Idempotent merge

Loads are idempotent, applied as a merge — upsert plus insert — so a re-run keeps the destination an accurate replica.

https://fivetran.com/docs/core-concepts/product-principles

Debezium + Tableflow on Confluent Cloud

Debezium + Tableflow on Confluent Cloud — Partial: At-least-once by default

At-least-once by default; exactly-once takes Kafka Connect's exactly-once support on both the worker and the connector (off by default), and Cloud sink connectors vary.

https://docs.confluent.io/platform/current/installation/configuration/connect/index.html

Estuary

Estuary — Partial: Exactly-once on transactions

Exactly-once for targets that support transactions; at-least-once to Kafka.

https://docs.estuary.dev/concepts/materialization

DIY

DIY — Partial: At-least-once; dedupe is yours

Kafka's default guarantee is at-least-once delivery; deduplicating replays in the destination is your writer's job.

https://kafka.apache.org/43/design/design/

Initial loads

The first load takes a consistent snapshot without locking the source.

Fabric

Fabric — Yes: Chunked, resumable, no locks

A chunked, resumable snapshot with the engine's own mark taken before the scan — no table locks, no downtime.

Fivetran

Fivetran — Yes: Plain SELECTs; no locks

The first full load is plain SELECTs — key-ordered and paginated on B-tree sources, whole-table on heap ones; a read replica keeps production isolated.

https://fivetran.com/docs/connectors/databases

Debezium + Tableflow on Confluent Cloud

Debezium + Tableflow on Confluent Cloud — Partial: Locks vary by connector

Incremental snapshots run in parallel with streaming and block nothing; the classic initial snapshot blocks streaming, and its locks vary — a global read lock by default on MySQL, none on PostgreSQL.

https://debezium.io/documentation/reference/stable/connectors/mysql.html

Estuary

Estuary — Partial: Backfill; standby optional

A backfill captures the tables' current state and then streams; a read-only standby keeps the load off production.

https://docs.estuary.dev/reference/Connectors/capture-connectors/PostgreSQL

DIY

DIY — No: Classic snapshot locks

Debezium's classic initial snapshot holds a global read lock on MySQL's tables by default; incremental snapshots are an opt-in mode you configure.

https://debezium.io/documentation/reference/stable/connectors/mysql.html

7 shipped source connectors (24 counting every managed-service target they reach) and 5 destination writers today — see the full list on Connectors.

The Fabric column shows both ways to run it. Where the hosted and self-hosted products differ — residency and what you operate — the row carries both cells; everywhere else one cell holds for both.

Get started

Streaming by end of day.

Sign up, point Fabric at your operational database, and pick where the tables land. No Kafka, no schema registry, no pipeline team to staff.

Product updates only, no spam.