REX | Kafka - Replay
Contenu
Contenu
Dans le cadre d’un projet sourcé depuis l’open data, j’ai mis en place un système d’ingestion de donnée permettant de gérer les éventuels changement de schémas ou un breaking change de la source tierce qui est instable.
Question
Architecture
Implémentation
Stockage brut et structuré
Le topic des events brut permet de garder la donnée chez nous, elle pourra ainsi être rejouée.
Le topic des events structurés pourra être consommé directement par les autres services.
Nous allons enrichir notre event avec des métadonnées pour tracer sa provenance, le type d’erreur, le type d’event, la date, et l’offset dans le topic structuré si le schéma est valide.
Voici un exemple de métadonnées pour un event brut :
|
|
Validation
- Le premier cas à gérer est celui ou le service tiers est indisponible
- Le second cas à gérer est celui ou le schéma est invalide
Il est important d’identifier les différents types d’erreurs possibles en séparant au minimum les erreurs nécessitant une intervention humaine (modification du schéma) ou un retry automatique :
- Service non disponible (retry)
- Erreur de schéma (nécessite une intervention humaine)
Service de Replay
Un service de replay nous permettra de rejouer nos events deux 2 façons :
- Service tiers indisponible : nous allons effectuer un appel à la source tierce pour récupérer les events manqués, et les rejouer avec la source : ReplayNetwork
- Schema invalide : nous allons adapter le schéma existant rejouer les events avec la source: ReplaySchema
Nous allons ainsi pouvoir rejouer les events depuis le topic raw pour de la donnée récente (en fonction de durée de rétention) ou depuis la base de donnée pour de la donnée plus ancienne.
Note
Cas d’usage
Les données de l’application Realtime Bike étant basée sur de l’open data, le schéma change régulièrement sans avertissement.
Il est donc indispensable d’avoir un système limitant la perte de donnée et permettant le replay des events.