CDC : le slot de réplication qui remplit votre disque
Un slot de réplication logique est une promesse de ne rien supprimer tant que le consommateur n'a pas confirmé. Les quatre façons dont cette promesse remplit le disque du primaire avec Debezium, et les garde-fous à poser avant la mise en production.
Par Elias Varen7 min de lectureMembres
Le Change Data Capture a une propriété que ses schémas d'architecture ne montrent pas : il donne à un composant périphérique le pouvoir d'arrêter votre base principale. Le connecteur lit le WAL à travers un slot de réplication, et PostgreSQL s'engage à conserver tout le WAL que ce slot n'a pas encore confirmé. Si le connecteur s'arrête un vendredi soir, le WAL s'accumule tout le week-end. Lundi, le volume est plein, PostgreSQL refuse les écritures, et la panne d'un flux analytique est devenue la panne du produit. C'est pourquoi le CDC s'exploite d'abord depuis la base, et seulement ensuite depuis le connecteur.
Ce qu'un slot promet
Un slot de réplication logique tient deux positions. restart_lsn est le point le plus ancien du WAL dont le décodage pourrait encore avoir besoin, et PostgreSQL ne recycle aucun segment postérieur. confirmed_flush_lsn est la position jusqu'où le consommateur a déclaré avoir tout reçu durablement.
WAL ───────────────────────────────────────────────▶ écriture courante
▲ ▲
restart_lsn confirmed_flush_lsn
└──── retenu sur disque, quoi qu'il arrive ────┘Le slot survit aux déconnexions et aux redémarrages ; c'est sa raison d'être, puisqu'il permet au connecteur de reprendre sans rien perdre. Mais la promesse n'a pas de limite par défaut. Un slot sans consommateur retient le WAL indéfiniment, et il retient aussi l'horizon du catalogue, ce qui gêne le vacuum des tables système.
La requête à connaître par cœur :
SELECT slot_name,
active,
wal_status,
pg_size_pretty(
pg_wal_lsn_diff(pg_current_wal_lsn(), restart_lsn)
) AS wal_retenu
FROM pg_replication_slots;wal_retenu est la métrique du CDC, bien avant le retard dans Kafka ou l'état du connecteur, parce qu'elle mesure le nombre d'octets que votre base garde en otage.
Ce qui fait grossir le WAL retenu
Le connecteur arrêté. C'est le cas évident : tâche en échec, déploiement raté, Kafka indisponible. Le slot passe à active = false et le WAL retenu croît au rythme des écritures. Sur une base qui produit 2 Go de WAL par heure avec 80 Go libres, il reste quarante heures, moins qu'un week-end prolongé.
À lire ensuite
Toute la rubrique DonnéesDonnées
Recherche vectorielle dans PostgreSQL : limites à mesurer
Les limites de pgvector qui décident s'il vous suffit (rappel de l'index, filtrage par tenant, mémoire) et la façon de les mesurer sur vos propres données avant de choisir une base dédiée.
6 minMembres
Données
Files d'attente dans PostgreSQL : jusqu'où
Une table et SKIP LOCKED font une file d'attente sérieuse, jusqu'au jour où une transaction longue ailleurs dans la base la met à genoux. Le mécanisme, les deux patrons de consommation, et les signaux qui disent qu'il est temps d'en sortir.
6 minMembres
Données
Analytique embarquée dans un SaaS
Où faire tourner les tableaux de bord que voient vos clients : sur la base transactionnelle, une replica ou un magasin séparé, avec quelle fraîcheur annoncée et quelle isolation entre tenants.
6 minMembres