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 pgoutputmysql- MySQL binlog replicationmariadb- MariaDB binlog replication (enablesmysql)sqlserver- SQL Server CDC via poll-based CDC tablesfull- 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;