CDC Performance
0
events/sec sustained
Sustained PostgreSQL to Kafka CDC throughput on a single 4 vCPU instance. Zero data loss across 141M+ events.
75 MB/s sustained · Peak: 98,927 events/sec
Throughput by Sink
Four sinks. One instance.
Sustained throughput from PostgreSQL CDC to each sink on a single c8g.xlarge (4 vCPU, 8 GB RAM).
RabbitMQ70,586/s
File68,825/s
Kafka68,471/s
S352,608/s
Each event is one row change (INSERT, UPDATE, or DELETE), ~1,093 bytes per event (12 columns). Mixed 50/30/20 INSERT/UPDATE/DELETE. Source: RDS db.m5.8xlarge (32 vCPU, 128 GB).
Aggregate Results
550.0M events. Zero data loss.
550.0M
Total events processed
across all sinks
4
Sink targets
independently benchmarked
0
Data loss
zero errors, zero retries
77 MB/s
Peak sustained throughput
70,586 events/sec
Full Results
All the numbers.
Sink
Sustained (events/s)
Total Events
Throughput (MB/s)
RabbitMQ
70,586/s
156.7M
77 MB/s
File
68,825/s
141.8M
75 MB/s
Kafka
68,471/s
141.1M
75 MB/s
S3
52,608/s
110.5M
58 MB/s
1 event = 1 row change (~1,093 bytes per event). Throughput (MB/s) derived from sustained rate.
Methodology
Test environment
Every number on this page was measured on real AWS infrastructure. No synthetic benchmarks, no cherry-picked runs.
Infrastructure
Remac: c8g.xlarge (4 vCPU Graviton 4, 8 GB RAM)Source: PostgreSQL 17 on RDS db.m5.8xlarge (32 vCPU, 128 GB)
Replication
Protocol: pgoutput logical replicationReplica identity: FULL (old + new tuple on UPDATE/DELETE)Slot: Single logical replication slotData integrity: Zero data loss, zero errors across all runs
Workload
Table: bench_standard (12 columns, ~1 KB per row)Operations: 50% INSERT / 30% UPDATE / 20% DELETERate: Unlimited (as fast as possible)Duration: ~30 minutes per sink, 30s warmupGenerator: Zetta
Schema
Table "app.bench_standard" Column | Type | Nullable -------------+--------------------+---------- id | bigserial | not null name | varchar(64) | not null email | varchar(128) | not null tier | varchar(16) | not null balance | numeric(12,2) | not null score | integer | not null is_active | boolean | not null region | varchar(32) | not null tags | varchar(512) | not null notes | varchar(512) | not null created_at | timestamptz | not null updated_at | timestamptz | not null
Deploy once. Forget the pipeline exists.
Your data arrives where it needs to be, in order, with delivery guarantees — and your team never thinks about it again.