Skip to main content

Crate rivven_cdc

Crate rivven_cdc 

Source
Expand description

§rivven-cdc - Change Data Capture for Rivven

Production-grade CDC support for PostgreSQL, MySQL, MariaDB, and SQL Server.

§Features

  • postgres - PostgreSQL logical replication via pgoutput
  • mysql - MySQL binlog replication
  • mariadb - MariaDB binlog replication (enables mysql)
  • sqlserver - SQL Server CDC via poll-based CDC tables
  • full - All CDC sources

§Architecture

┌───────────┐   ┌───────────┐   ┌───────────┐   ┌───────────┐
│PostgreSQL │   │  MySQL    │   │ MariaDB   │   │SQL Server │
│   WAL     │   │  Binlog   │   │  Binlog   │   │CDC Tables │
└─────┬─────┘   └─────┬─────┘   └─────┬─────┘   └─────┬─────┘
      │               │               │               │
      ▼               ▼               ▼               ▼
┌──────────────────────────────────────────────────────────┐
│                    CdcSource Trait                       │
└──────────────────────────────────────────────────────────┘
      │               │               │               │
      ▼               ▼               ▼               ▼
┌──────────────────────────────────────────────────────────┐
│                     CdcEvent                             │
│    { op: Insert/Update/Delete, before, after, ... }     │
└──────────────────────────────────────────────────────────┘

§Quick Start

use rivven_cdc::postgres::{PostgresCdc, PostgresCdcConfig};
use rivven_cdc::CdcSource;

let config = PostgresCdcConfig::builder()
    .connection_string("postgres://user:pass@localhost/mydb")
    .slot_name("rivven_slot")
    .publication_name("rivven_pub")
    .build()?;

let mut cdc = PostgresCdc::new(config);
cdc.start().await?;

§Public API Organization

This crate exposes types in three tiers:

§Tier 1: Core Types (crate root)

Essential types for basic CDC operations - CdcEvent, CdcOp, CdcSource.

§Tier 2: Feature Types (crate root)

Optional features for production use - SMT transforms, deduplication, encryption.

§Tier 3: Advanced Types (common module)

Internal/advanced types for custom implementations - accessed via common::*.

Re-exports§

pub use common::CdcError;
pub use common::CdcEvent;
pub use common::CdcFilter;
pub use common::CdcFilterConfig;
pub use common::CdcOp;
pub use common::CdcSource;
pub use common::ErrorCategory;
pub use common::Result;
pub use common::TableColumnConfig;
pub use common::Cast;
pub use common::CastType;
pub use common::ComputeField;
pub use common::ContentRouter;
pub use common::ExtractNewRecordState;
pub use common::Filter;
pub use common::FilterCondition;
pub use common::Flatten;
pub use common::HeaderSource;
pub use common::HeaderToValue;
pub use common::InsertField;
pub use common::MaskField;
pub use common::NullCondition;
pub use common::RegexRouter;
pub use common::ReplaceField;
pub use common::SetNull;
pub use common::Smt;
pub use common::SmtChain;
pub use common::TimestampConverter;
pub use common::TimestampFormat;
pub use common::TimezoneConverter;
pub use common::Unwrap;
pub use common::ValueToKey;
pub use common::Deduplicator;
pub use common::DeduplicatorConfig;
pub use common::KeyStrategy;
pub use common::ColumnDefinition;
pub use common::SchemaChangeConfig;
pub use common::SchemaChangeEmitter;
pub use common::SchemaChangeEvent;
pub use common::TransactionEvent;
pub use common::TransactionTopicConfig;
pub use common::TransactionTopicEmitter;
pub use common::TombstoneConfig;
pub use common::TombstoneEmitter;
pub use common::Signal;
pub use common::SignalProcessor;
pub use common::SignalResult;
pub use common::EncryptionConfig;
pub use common::FieldEncryptor;
pub use common::MemoryKeyProvider;

Modules§

common
Common CDC Types and Traits
mysql
MySQL/MariaDB CDC implementation using binary log replication
postgres
PostgreSQL CDC implementation using logical replication