Change Data Capture (CDC)
Le pattern qui transforme une DB en source d'évènements sans modifier l'application — clé d'intégration EDI sans intrusion.
Problème
Un ERP legacy ne peut pas être modifié pour publier des évènements lors de chaque changement (commande créée, statut mis à jour). Comment alimenter le hub EDI en temps réel sans toucher au code applicatif ?
Forces
- Modifier l'ERP coûte cher et est risqué (rules métier denses, peu de tests).
- Un polling périodique de la DB ne capte pas les changements rapides et stresse la DB.
- Le transaction log de la DB contient déjà tous les changements — ne pas le réutiliser est gaspillage.
- Le CDC doit gérer initial snapshot + incremental sans manquer un changement entre les deux.
Solution
Brancher un connector CDC sur le transaction log de la DB. Le connector lit le log, transforme chaque entrée en évènement structuré, et publie sur un broker. Pour PostgreSQL : `wal2json`, Debezium PostgreSQL connector. Pour MySQL : Debezium MySQL via binlog. Pour SQL Server : Change Tracking + Debezium. Le pattern est non-intrusif (zéro changement application) et garantit at-least-once delivery sur le broker.
Implémentation EDI
En EDI, le CDC est la voie de référence pour intégrer un ERP non-Kafka-native dans un hub moderne. Cas type : SAP ERP sur Oracle 19c → Debezium Oracle connector → Kafka topic `sap.orders.cdc` → transformation Camel → publication ORDERS EDIFACT au partenaire. Le pattern marche aussi en sens inverse pour matérialiser des read models. Combine bien avec Outbox (l'Outbox sur la table outbox + CDC sur la WAL = écriture atomique applicative, publication broker dérivée).
Anti-patterns
- CDC sur des tables sans clé primaire — Debezium ne peut pas garantir l'ordering / unicité.
- CDC avec un snapshot manquant — les rows pré-existantes sont absentes du broker.
- CDC sur une table volumineuse sans throttling — le broker sature.
- CDC qui expose des champs PII sans filtrage — fuite RGPD.
Patterns liés
- Outbox (architectural) — CDC sur la table outbox est l'idiom standard.
- Message Translator — transformation des events CDC en messages EDI.
- Event Message — style de message produit par CDC.
- Guaranteed Delivery — garantie at-least-once du CDC.
Sources
- Debezium — Distributed CDC platform documentation. debezium.io/documentation/
- Microsoft SQL Server — Change Data Capture overview. learn.microsoft.com/en-us/sql/relational-databases/track-changes/about-change-data-capture-sql-server
- Confluent — Kafka Connect CDC source connectors. docs.confluent.io/platform/current/connect/index.html