Article

Best Change Data Capture and Database Replication Platforms for Node.js SaaS Apps in 2026

Compare Fivetran, Airbyte, Estuary Flow, AWS DMS, and Striim for Node.js SaaS change data capture and database replication in 2026, including pricing and CDC architecture.

Best Change Data Capture and Database Replication Platforms for Node.js SaaS Apps in 2026

A Node.js SaaS application usually starts with one operational database. Then the same data needs to exist somewhere else. Typical examples include PostgreSQL to ClickHouse for customer analytics, MySQL to Snowflake for finance and BI, PostgreSQL to Elasticsearch/OpenSearch for product search, MongoDB to a data lake for machine learning, Aurora to another region for migration or DR, and production database to Kafka for downstream event consumers.

Why Dual Writes Break Down

The first implementation is often application-level dual write:

await postgres.updateCustomer(customer);
await searchIndex.updateCustomer(customer);

That looks simple. It is not reliable.

If PostgreSQL commits and the search write fails, the two systems disagree. If the search write succeeds and the database transaction rolls back, the search index contains state that never became durable. If the second dependency is slow, every customer request is now slower.

Change Data Capture (CDC) solves a different problem: observe committed changes from the database’s transaction log and reproduce them downstream asynchronously.

Node.js
   |
   v
OLTP database
   |
   v
WAL / binlog / transaction log
   |
   v
CDC platform
   |--+--> analytics
   |--+--> search
   |--+--> warehouse
   |--+--> Kafka
   |--+--> migration target

For Node.js SaaS teams in 2026, five strong managed options are worth evaluating: Fivetran, Airbyte, Estuary Flow, AWS Database Migration Service, and Striim. They overlap, but they are optimized for different buyers.

Quick Recommendation

  • Choose Fivetran when connector breadth, operational maturity, low-maintenance pipelines, and enterprise governance matter more than the lowest theoretical infrastructure cost.
  • Choose Airbyte when open-source portability and connector extensibility are strategic.
  • Choose Estuary Flow when low-latency streaming CDC is the primary requirement.
  • Choose AWS DMS when the project is an AWS-native database migration or continuous replication problem.
  • Choose Striim when enterprise-grade streaming CDC from Oracle, SQL Server, and MySQL must feed cloud analytics, AI, or data platforms under strong private-network requirements.

CDC vs ETL vs Event Streaming

These categories overlap, but they are not identical.

CDC observes database changes: INSERT, UPDATE, DELETE, COMMIT. The database transaction log is the source.

ETL / ELT moves and transforms data between systems. It may use API polling, SQL queries, files, CDC, or batch exports. CDC can be one ingestion method inside an ELT platform.

Event streaming stores an application/event stream in Kafka or another broker. CDC can publish database changes into Kafka.

The distinction matters because the event contract from CDC is usually database-oriented (table changed, row changed, column values), while a domain event is application-oriented (subscription.cancelled, invoice.paid, member.invited). Do not confuse the two.

CDC vs the Transactional Outbox Pattern

CDC is excellent for reproducing data changes. An outbox is better when the event itself is part of your business contract. Suppose the application executes a subscription cancellation. The important downstream fact is subscription.cancelled, not merely “row subscriptions changed from active to cancelled”.

A transactional outbox writes both the subscription state and the domain event inside one transaction. Then CDC can read the outbox table. This gives a robust hybrid architecture:

Node.js transaction
   |--+--> business row
   |--+--> outbox event
   |
   v
CDC
   |
   v
event stream

Use direct table CDC for replication, search, and analytics. Use outbox + CDC for important business events.

How Log-Based CDC Works

For PostgreSQL, the source is the WAL. For MySQL, it is the binary log (binlog). For SQL Server, it is the transaction log and CDC mechanisms. For Oracle, it is redo/archive logs.

The CDC system normally performs these steps:

  1. Take an initial snapshot.
  2. Record a log position.
  3. Tail the transaction log.
  4. Convert database changes into change records.
  5. Checkpoint progress.
  6. Write changes to the destination.
  7. Resume from the checkpoint after failures.

The important property is that only committed database changes should be replicated.

2026 Comparison Table

PlatformBest ForPublic Pricing SignalConnector BreadthCDC StyleDeployment
FivetranLow-maintenance managed data movementFree up to 500k connection MAR; paid usage-based; $5 base charge on eligible Standard connections700+ managed connectorsManaged database connectors with incremental/CDC patternsSaaS + enterprise hybrid
AirbyteOpen source, extensibility, custom connectorsCore free self-managed; Standard managed cloud starts $10/mo; Pro capacity-based custom600+ replication connectorsFull refresh, incremental, log-based CDCCloud, self-managed, Enterprise Flex
Estuary FlowLow-latency CDC and streaming/batch convergenceFree 10 GB/mo + 2 connectors; Cloud $0.50/GB + connector task usage200+ fully managedLog-based streaming CDC, real-time collectionsCloud, Private, BYOC
AWS DMSDatabase migrations and AWS-native replicationServerless billed per DCU-hour; provisioned instances also available20+ database/warehouse endpointsFull load, CDC, or full load + CDCAWS managed
StriimEnterprise streaming CDC and modernizationDeveloper free up to 25M events/mo; Cloud custom200+ preview/standard/premium application connectorsLog-based enterprise CDC + stream processingSaaS cloud or self-managed

1. Fivetran: Best Fully Managed Connector Ecosystem

Fivetran’s value proposition is operational simplicity. You configure source, destination, and sync behavior, and the platform owns most of the connector lifecycle.

The current Standard plan includes unlimited users, 15-minute syncs, 700+ fully managed connectors, 200+ activation destinations, dbt Core integration, RBAC, a REST API, and SSH tunneling. Enterprise adds features such as 1-minute syncs, custom roles, SCIM, VPN tunneling under applicable contract terms, and hybrid deployment options.

Fivetran Pricing in September 2026

The Free plan currently includes 500,000 Monthly Active Rows (MAR) for connections, 3,500 MAR for activations, and 5,000 monthly model runs for transformations.

Connection pricing is based on Monthly Active Rows. A row is generally active when it is inserted, updated, or deleted during the billing period. A table with 10 million rows but only 50,000 rows changed this month does not necessarily produce the same usage as 10 million active rows.

The current Fivetran pricing documentation also states a $5 base charge for Standard connections between 1 MAR and 1 million MAR. That base charge does not apply to the Free plan.

Why MAR Can Surprise SaaS Teams

Imagine a table usage_counters with one row per tenant updated every few seconds. The physical table may be small, but the update frequency is high. A row-based billing model can therefore behave very differently from a GB-based data-movement model. Model the actual source mutation pattern; do not estimate only from database size.

Initial Sync vs Incremental Use

Fivetran’s pricing documentation distinguishes initial sync behavior from ongoing MAR. A 2 TB initial snapshot can be operationally large without producing the same recurring billing behavior as 2 TB of monthly changes. Always separate initial load from steady-state CDC in the cost model.

Best Fit for Fivetran

Use Fivetran when you want minimal pipeline operations, connector breadth is important, SaaS APIs and databases live in one integration platform, enterprise governance is required, and data engineering headcount is more expensive than connector software.

2. Airbyte: Best Open-Source and Connector Extensibility

Airbyte’s strongest differentiator is flexibility. It has one ecosystem that can be used as open source, managed cloud, or enterprise controlled deployment. The current replication product lists 600+ connectors and supports full refresh, incremental append, log-based CDC, schema propagation, column selection, API-triggered sync, and custom connectors.

Airbyte Pricing in September 2026

  • Core — self-managed, always free, open source.
  • Standard — fully managed cloud, starts at $10/month, volume-based pricing, maximum standard sync frequency of about 1 hour.
  • Pro — managed cloud, capacity-based pricing, multiple workspaces, SSO/RBAC, premium support, 15-minute syncs.
  • Enterprise Flex — designed for stronger sovereignty/control requirements, sales-led custom terms.

Airbyte’s Cloud pricing examples describe credits at $2.50 per credit, with database/warehouse/file data and API rows consuming credits according to source category. Because the public pricing packaging has changed several times, use the live estimator for production procurement.

CDC Operational Reality

Airbyte’s late-August 2026 replication guides contain a useful warning: CDC is still constrained by the source database’s log configuration.

For PostgreSQL, logical replication needs replication privileges, a replication slot, a publication, and sufficient WAL retention. If a pipeline is stopped but the replication slot remains, PostgreSQL can retain WAL indefinitely. That can fill disk. This is fundamental to log-based CDC, not an Airbyte-specific concept.

For MySQL, CDC depends on binlog configuration. Typical settings include:

binlog_format = ROW
binlog_row_image = FULL

Managed providers can implement retention differently. Amazon RDS, for example, uses its own binlog retention configuration rather than assuming generic MySQL settings will be enough.

Best Fit for Airbyte

Use Airbyte when open source matters, you may self-host later, connector extensibility matters, custom API connectors are common, and your team is comfortable owning more integration behavior than with Fivetran.

3. Estuary Flow: Best Low-Latency Streaming CDC

Estuary is architected around streaming data movement. Its pricing model is also one of the easiest to explain.

Estuary Pricing in September 2026

  • Developer / Free — $0, up to 10 GB/month, up to 2 concurrent connector instances.
  • Cloud — 30-day free trial, $0.50 per GB moved, first six connector instances effectively $100/month each, additional connectors $50/month each.

The documentation expresses connector usage hourly: $0.14 per task hour for the first tier, and $0.07 per task hour beyond the first six-connector equivalent. This makes temporary connectors prorated instead of forcing a whole calendar-month charge.

Capture Once, Deliver Many

Estuary uses an internal collection model. A source can be captured once and then materialized to multiple destinations. Conceptually:

PostgreSQL
   |
   v
Flow collection
   |--+--> Snowflake
   |--+--> ClickHouse
   |--+--> Kafka-compatible consumer
   |--+--> S3

That can be attractive when one operational source feeds many systems.

2026 CDC Improvements

Estuary shipped several relevant CDC changes in March 2026, including watermarkless CDC, CDC from PostgreSQL read-only replicas, and watermarkless SQL Server CDC. The architectural value is reducing write requirements on the primary database. For a heavily loaded Node.js SaaS database, reading CDC from a replica can reduce pressure and simplify least-privilege access.

Private Deployments GA

On August 20, 2026, Estuary announced that Private Deployments became generally available. Enterprise deployments can run integration infrastructure in private cloud or on-premises environments under appropriate commercial plans. This matters when database logs contain highly sensitive operational data.

Best Fit for Estuary

Use Estuary when low-latency CDC matters, data should move continuously rather than on a 15–60 minute schedule, per-GB pricing is easier to model than MAR, one source feeds multiple targets, and read-replica CDC is valuable.

4. AWS DMS: Best for AWS Database Migration and Continuous Replication

AWS Database Migration Service is not a general SaaS connector platform. It is a database migration and replication service, and that specialization is useful.

DMS Replication Modes

DMS supports full load, CDC only, and full load + CDC. The most common low-downtime migration uses full load + CDC: copy existing data, continue capturing changes, wait until replication lag is near zero, freeze writes briefly, validate, then cut over the application.

DMS Serverless

AWS DMS Serverless removes replication-instance sizing. You configure minimum and maximum DCU. A DMS Capacity Unit is 2 GB RAM, and valid current capacity values include 1, 2, 4, 8, 16, 32, 64, 128, 192, 256, and 384. DMS automatically adjusts replication capacity inside the configured range. Pricing is per DCU-hour and varies by region and deployment mode.

Supported Serverless Endpoints

Current DMS Serverless documentation lists source support including PostgreSQL-compatible, MySQL-compatible, MariaDB, SQL Server, Oracle, MongoDB, DocumentDB, S3, and Db2. Targets include PostgreSQL, MySQL, SQL Server, Oracle, S3, Redshift, DynamoDB, Kinesis, MSK, OpenSearch, DocumentDB, and Neptune. This makes DMS useful for more than “RDS to RDS.”

2026 AWS DMS Changes

AWS ended support for DMS Fleet Advisor on May 20, 2026. Do not design a new migration workflow around Fleet Advisor. DMS Schema Conversion remains active and has moved in the opposite direction: on July 10, 2026, AWS added AI-agent automation for DMS Schema Conversion through an AWS MCP Server. Supported coding agents can create migration projects, inspect metadata, generate assessments, and assist schema conversion workflows. This is highly relevant for heterogeneous migrations such as SQL Server to PostgreSQL or Oracle to Aurora PostgreSQL.

Best Fit for AWS DMS

Use AWS DMS when the source or target is AWS-heavy, the project is a database migration, low downtime matters, heterogeneous conversion is part of the project, and AWS networking/IAM/Secrets Manager are already standardized.

5. Striim: Best Enterprise Streaming CDC

Striim is optimized for enterprise streaming data integration and CDC. Its use cases often involve Oracle, SQL Server, MySQL, cloud data warehouses, Databricks, BigQuery, Snowflake, Redshift, Microsoft Fabric, ClickHouse, and hybrid/on-prem sources.

Current Striim Packaging

  • Striim Developer — free, up to 25 million events/month, serverless stream processing with SQL, automated data pipelines, and trial access to broader connectors.
  • Striim Cloud — fully managed, custom pricing, dedicated compute/networking, private/on-prem networking, customer-managed encryption keys, and enterprise compliance features. Striim states that customers pay for the data they move.
  • Striim Platform — self-managed, custom license, deployed on your infrastructure.

Streaming Transformation

Striim can transform and route data while it moves. This is useful when a destination should not receive the source schema exactly — for example, removing PII, normalizing columns, and filtering rows before writing to BigQuery. Be careful: complex transformation inside the replication path can make migration troubleshooting harder. For critical database migrations, start with faithful replication and add transformations only when explicitly required.

Striim 5.4.2 in August 2026

Striim announced version 5.4.2 on August 20, 2026. The release added MCP-based capabilities and continued the focus on real-time delivery into BigQuery, Snowflake, Redshift, ClickHouse, Microsoft Fabric, and Databricks. The product direction increasingly connects CDC with AI/agent data freshness — for enterprise AI systems, operational source data may need to appear in the retrieval/analytics layer continuously.

Best Fit for Striim

Use Striim when enterprise Oracle/SQL Server CDC matters, near-real-time delivery is required, hybrid/on-prem networking is a major constraint, streaming transformations are wanted, and compliance and customer-managed encryption are procurement requirements.

CDC Patterns for Node.js SaaS

CDC for Search Indexes

A common pattern is PostgreSQL to CDC to OpenSearch/Elasticsearch. The source database remains canonical and search becomes a projection. Every indexed record should carry a source version:

{
  "customer_id": "cus_42",
  "source_version": 9817,
  "name": "Acme",
  "plan": "enterprise"
}

If events arrive late or are retried, the projection layer can reject an older version.

CDC for Analytics

This is often the most valuable use case: PostgreSQL OLTP to CDC to ClickHouse, Snowflake, or BigQuery. The application database remains optimized for transactions, point reads, and updates, while the analytical database handles scans, aggregations, dashboards, and exports. This prevents a customer dashboard from becoming an OLTP performance incident.

Suppose customer documents are stored in PostgreSQL and you want semantic search. A safe pipeline is PostgreSQL to CDC to an indexing worker that chunks and embeds documents into a vector database. Do not run the embedding API inside the source database transaction — CDC creates an asynchronous boundary. Store the source row version, embedding model version, and chunk version so stale embedding writes can be detected.

Production Risk Management

PostgreSQL: WAL Retention Is a Production Requirement

Logical replication slots hold a position in WAL. If the CDC consumer stops, Postgres continues writing WAL and the slot may prevent needed WAL from being removed. A prolonged outage can fill storage. Monitor replication slot lag, retained WAL bytes, source disk free space, replication delay, and connector health. This deserves an alert — for example, CDC lag greater than 10 minutes or retained WAL above 20 GB.

MySQL: Binlog Retention Is the Equivalent Risk

If the CDC connector is offline longer than binlog retention, the required binlog segment disappears and the connector may no longer be able to resume. You then need a full resnapshot or another recovery process. Set retention using the worst credible outage duration. If the pipeline SLA says recovery within 24 hours, keeping only two hours of logs is inconsistent.

Database Replicas Can Reduce Source Impact

Where supported, you can keep application traffic on the primary and run CDC from a read replica. This isolates snapshot reads, replication access, and connector CPU/I/O. But replication-from-replica has engine/provider-specific requirements — do not assume every managed database exposes the necessary logs on replicas. Estuary’s 2026 PostgreSQL read-only-replica CDC support is notable because this is explicitly part of the product.

Primary Keys Matter

CDC systems need stable row identity. A table without a primary key can be difficult to replicate efficiently — updates and deletes become ambiguous or require heavier row images. For CDC-critical tables, define a stable primary key, avoid frequently changing PK values, and use surrogate keys where appropriate. Do not wait until migration week to discover that a high-volume table has no reliable key.

Schema Evolution Is the Hard Part

Data movement is easy when schema never changes. Production databases change constantly. The CDC platform and destination need a defined response for each change:

  • Additive changes (ADD COLUMN) are usually easiest — the destination can add a nullable column.
  • Rename is potentially breaking — a destination may see the old column deleted and the new column added instead of a semantic rename.
  • Type change (INT to VARCHAR) is dangerous if the destination cannot evolve automatically.
  • Primary-key change is very dangerous for CDC because it affects row identity and deduplication — treat it as a migration project.

For important pipelines, use a schema compatibility process: create a database migration PR, run a pipeline compatibility check, notify downstream owners, apply the schema, monitor replication, and validate the destination. This can be part of CI/CD — a database migration is now also a data-contract migration.

Deletes Must Be Propagated Deliberately

A stale downstream system is not only an analytics problem; it can be a privacy problem. If a customer deletes a document, user, or tenant, the deletion may need to reach the warehouse, search, vector database, data lake, and cache. The CDC architecture must represent delete events, and every materializer must implement them. Do not only test inserts.

Exactly-Once Is Usually the Wrong Mental Model

Replication systems retry and networks fail. A destination write can succeed before the source connector receives acknowledgement. Assume duplicates can occur. The destination should support idempotent upsert, source offset/version, primary-key replacement, and deduplication. For event consumers, event_id plus source_lsn/binlog_position can be useful metadata.

Ordering

Database logs have a transaction order, but parallel destination writes can alter visible order. The important question is what ordering the destination requires. For a row projection, “latest version wins” may be enough. For financial domain events, order may be part of correctness — another reason domain events often belong in an outbox rather than inferred from arbitrary table updates.

Low-Downtime Database Migration

CDC is one of the safest ways to migrate a production database. A robust runbook looks like this:

Phase 1: Prepare — create the target, apply schema, verify extensions/config, configure users/network, set log retention.

Phase 2: Initial Load — snapshot source to target.

Phase 3: Continuous Replication — stream source changes to target and monitor lag.

Phase 4: Validate — compare row counts, checksums, important aggregates, sampled records, constraints, and sequences/identity values.

Phase 5: Shadow Read — for some workloads, keep production writes on the source while selected reads compare source vs target.

Phase 6: Cutover — reduce write traffic, fence/freeze writes, wait for CDC lag to equal zero, run final validation, update the application connection, and reopen writes.

Phase 7: Rollback Window — keep the source available and define rollback criteria. Do not immediately destroy the old database.

Do Not Run Bidirectional Replication Without Conflict Rules

A dangerous migration plan is: old DB accepts writes, new DB accepts writes, both replicate to each other. Now the same row can change in both systems and you need conflict resolution. Unless active-active is the explicit product architecture, use one authoritative writer during migration.

Cutover DNS Is Not Enough

Changing the database hostname does not instantly move existing Node.js connections. Connection pools keep sockets open. During cutover, drain old application instances, restart/recycle connection pools, verify the new host, handle long-running workers, update migrations/admin jobs, and check read replicas and cron jobs. Database migration is an application lifecycle event.

Node.js Connection Pool Considerations

If the database goes read-only during cutover, existing requests can fail. Use bounded retries for safe operations, connection timeouts, graceful application draining, and idempotent request semantics where possible. Do not blindly retry every transaction — a payment or external side effect may not be safe to repeat.

Security Model

A CDC connector often has broad database read access. Use a dedicated principal, preferring a replication user over an application admin user. Grant only required schema read, table read, and replication/log permissions. Use TLS, private networking, SSH tunnels/PrivateLink where supported, a secrets manager, and credential rotation. Do not embed database passwords in pipeline config committed to Git.

PII and Data Minimization

CDC can accidentally turn one sensitive database into five sensitive databases. Only replicate required columns. If analytics does not need password hashes, full identity documents, or secret tokens, do not send them. Column selection is a security feature.

Monitoring CDC

Track replication lag, snapshot progress, records/bytes processed, source-log position, destination checkpoint, errors/retries, dead-letter/rejected rows, schema-change failures, source WAL/binlog retention, and destination write latency. Define freshness SLOs — for example, 99.9% of committed changes queryable in analytics within 60 seconds. The platform dashboard being green is not enough: measure source commit time against destination availability time.

Cost Modeling

Collect database size, monthly changed rows, monthly changed GB, update frequency, delete rate, number of sources, number of destinations, required latency, initial snapshot size, private networking, and HA requirement. Then translate to provider billing units:

  • Fivetran — main cost dimension is Monthly Active Rows.
  • Airbyte Standard — main public model is volume/credits; higher tiers use capacity-style commercial pricing.
  • Estuary — main model is $0.50 per GB moved plus connector task usage.
  • AWS DMS — main model is replication capacity time through serverless DCUs or provisioned instances.
  • Striim — cloud commercial terms are custom and centered around data movement/capacity requirements.

Cost Example: High-Churn Small Table

Suppose a table is 5 GB with 1 million rows and every row is updated daily. Monthly changed data may be large, and monthly active rows may approach the full row population. A MAR-priced connector and a GB-priced connector can produce very different bills. Never estimate CDC cost from storage size alone.

Cost Example: Huge, Mostly Static Table

Suppose a table is 2 TB with 2 GB of monthly changed data. The initial snapshot is huge, but steady-state CDC is tiny. A usage model that separates initial sync from recurring changes can be attractive. Benchmark the actual billing unit.

When a Custom Connector Is Worth It

Managed platforms do not support every internal system. Airbyte’s Connector Builder/CDK is attractive when the source is a custom API. But a database CDC connector is much harder than a REST connector. A production database connector must handle log positions, transactions, schema changes, backpressure, snapshots, large objects, reconnects, and source-version differences. Do not casually build your own PostgreSQL WAL consumer when a managed connector already exists.

When Debezium Is Better

Debezium remains a strong open-source choice, especially when Kafka is already a platform standard, the team has Kafka Connect expertise, and self-hosting is strategic. A managed CDC platform is attractive when the team does not want to own Kafka Connect, connector upgrades, schema registry integration, and operational recovery.

Buying Decision by SaaS Stage

Early SaaS — do not add CDC until a real second data system exists. If needed, evaluate Airbyte Core, Fivetran Free, or Estuary Free. Keep the topology simple.

Growing SaaS — a common trigger is analytics hurting PostgreSQL. Move analytics data using CDC. Prioritize source-log retention, schema evolution, deletion propagation, freshness SLO, and cost model.

Database Migration — evaluate AWS DMS for AWS-centric moves, Striim for enterprise/hybrid migrations, and Fivetran/Airbyte/Estuary when the destination is an analytical system and the pipeline should continue after migration.

Enterprise B2B SaaS — add requirements for private networking, SSO/RBAC, audit logs, data residency, BYOC/private deployment, customer-managed encryption, and predictable support/SLA.

Real-Time Analytics / AI — evaluate Estuary, Striim, Airbyte, or Fivetran based on required latency and destination ecosystem. Do not market a pipeline as “real time” if it runs every 15 minutes — define the actual freshness target.

Final Recommendation

For Node.js SaaS in 2026:

  • Fivetran is the best default when operational simplicity and managed connector breadth are worth paying for.
  • Airbyte is the strongest fit when open source, deployment flexibility, and custom connector development are strategic.
  • Estuary Flow is particularly compelling when low-latency database CDC, transparent per-GB pricing, and streaming/batch convergence matter.
  • AWS DMS is the best specialized choice for AWS-centric low-downtime database migrations and continuous replication.
  • Striim is strongest for enterprise streaming CDC, hybrid/on-prem sources, database modernization, and heavily governed real-time pipelines.

The most important architecture rule is this: do not make your Node.js request path responsible for keeping multiple databases consistent. Commit business state once, capture the committed change, replicate asynchronously, monitor lag, protect transaction-log retention, and validate schema evolution. For business-domain events, pair CDC with a transactional outbox rather than reverse-engineering domain meaning from arbitrary row changes. That is the difference between a fragile dual-write integration and a production data-replication architecture.

FAQ

Is CDC better than dual writes from Node.js?
For reproducing committed database state, usually yes. Dual writes can leave systems inconsistent when one operation succeeds and another fails. CDC reads the committed transaction log after the write.
Should I use CDC or a transactional outbox?
Use CDC for data replication and a transactional outbox when the event is a domain contract like invoice.paid. Many robust architectures combine both: write the outbox transactionally, then publish it with CDC.
Does PostgreSQL CDC increase WAL usage?
Yes. A logical replication slot can retain WAL while a consumer is behind. Monitor slot lag and storage, and remove abandoned slots to prevent disk exhaustion.
Is CDC exactly once?
No. Connectors and destinations can retry, so assume duplicates. Use idempotent upserts, primary keys, source offsets, and source versions in the destination.