Bounded CDC Divergence Verification & Repair

Explain and Repair The Rows
Your CDC Pipeline Missed.

Stop re-snapshotting your entire production database when Kafka drops a batch. StreamRepair identifies silent data drift, pins expected row preimages, and executes operator-reviewed idempotent repairs with zero risk of overwriting newer data.

✓ PostgreSQL 14–17 to Replica/Warehouse
✓ Debezium & Kafka Engine Support
✓ Preimage Conflict Halting
✓ Zero Sensitive Raw Rows in Control Plane

1-Minute Zero-Downtime Setup

Reconcile Streaming Data in Seconds

StreamRepair operates on your own infrastructure. Raw database rows and messages never leave your private VPC.

npx streamrepair init # Configure pipeline & preimage fencing
npx streamrepair reconcile --pipeline production-orders-cdc # Dry-run reconciliation

Generates streamrepair.config.json, configures keyset chunk pagination, and binds target preimage validation rules.

Interactive Divergence & Repair Sandbox

Simulate a silent CDC divergence: run keyset comparison, inspect root causes, compile a verifiable plan, and execute a preimage-fenced repair.

streamrepair-engine // keyset-reconciliation
STANDBY
// Pipeline: pg_orders_to_snowflake (PostgreSQL -> Debezium -> S3/Snowflake)
// Target Table: public.orders (Chunk: keyset order_id 1000..2000)
// Ready. Click "Simulate Divergence & Repair" to execute pipeline check.

Discrepancy & Root Cause 0 detected

No discrepancies scanned yet.

Verifiable Plan Digest

Plan ID: None
Digest (SHA-256): Uncompiled
Preimage Match: Pending

Public Verification & Trust Badges

Embed Real-Time Parity Proofs

Prove data integrity to internal stakeholders, auditors, and customers with dynamically generated vector badges.

Live Badge Preview
Markdown Embed
HTML Embed

Hard Engineering Problem Solved

Why Naive UPSERTs Corrupt Production

If your repair script runs while live CDC traffic catches up, an unconditional overwrite destroys newer valid mutations. StreamRepair implements mathematical Preimage Fencing.

✕

The Naive UPSERT Race

At 02:01 AM, operator detects target has status "PENDING" while source has "PAID". Operator runs a blindly generated SQL UPDATE. But at 02:02 AM, customer cancels order and CDC was in transit. The script overwrites "CANCELLED" with stale "PAID".

✓

StreamRepair Preimage Check

Every repair operation attaches the cryptographic hash of the expected target row. If target value changed in the millisecond before execution, StreamRepair fences the row and aborts the batch before mutation occurs.

0

Zero Production Load

No locking entire tables. No exhausting database IOPS or replication slots with multi-terabyte global re-snapshots. Keyset pagination operates in bounded batches of 500 records.

Predictable Economics

Stream Reconciliation for Every Scale

Customer-operated runners mean zero raw customer records are ever sent to our control plane.

Community Core
$0 forever

Self-hosted CLI for manual keyset divergence investigation.

  • ✓ Single pipeline diffing
  • ✓ Keyset chunk scanner
  • ✓ Dry-run repair generator
  • ✓ Local SQLite ledger
View on GitHub
Starter
$99 / mo

Continuous drift monitoring for lean engineering teams.

  • ✓ Up to 3 CDC pipelines
  • ✓ Preimage-fenced repairs
  • ✓ Slack & Discord webhooks
  • ✓ Signed SHA-256 evidence
Recommended
DataOps Pro
$299 / mo

Automated scheduled repairs and compliance evidence bundles.

  • ✓ Up to 15 CDC pipelines
  • ✓ Automated scheduled repairs
  • ✓ SOC 2 / Vanta Auditor Pack
  • ✓ Lag vs divergence filtering
  • ✓ Priority support
Enterprise
$699 / mo

High-throughput streaming across multi-region clusters.

  • ✓ Unlimited CDC pipelines
  • ✓ Custom warehouse connectors
  • ✓ Multi-region runners
  • ✓ Dedicated 24/7 SLA
  • ✓ Custom SOC attestation

Frequently Asked Questions

How do you distinguish replication lag from permanent divergence?

StreamRepair uses a configurable maintenance grace window (default 30 minutes). When a discrepancy is detected, the pipeline marks it as 'pending_lag'. Only after the lag window has elapsed and the source row timestamp has committed past the target LSN does it get promoted to an actionable discrepancy.

What happens if a target record has a row that does not exist in the source?

StreamRepair strictly classifies unexpected rows as 'UNEXPECTED_IN_TARGET'. Because CDC sinks often receive writes from multiple microservices, StreamRepair quarantines these records as report-only and never deletes them automatically without manual operator signoff.

Does StreamRepair require superuser database permissions?

No. StreamRepair requires standard SELECT privileges on the source tables and SELECT/INSERT/UPDATE privileges on target tables. It does not manipulate WAL logs or require REPLICATION privileges.