L’un des défis fréquemment rencontré au sein d'un SI est de pouvoir assurer une transmission sans faille et un traitement rapide et efficace des flux de données.
Interne
Découplage des microservices
Ingestion des données
Vision Architecture
Ce qui nous donne ...
Vision Architecture
Spaghetti architectures
Streaming architecture
Une boîte centrale intégrée au milieu
Cons:
Demande beaucoup de temps pour comprendre son fonctionnement
Pros:
Quand ne pas l'utiliser
L’évènement: Un fait qui s’est produit dans le passé : il est immuable.
La commande: Une intention provoquée par l’extérieur (utilisateur, système) sur votre application.
L’event/state store (magasin d’évènements) : Sert à stocker l’ensemble des évènements produits par l’application.
La fonction de décision: Correspond au coeur de votre métier et contient l’ensemble de vos règles de gestion.
La fonction d’évolution: A pour objectif de faire muter l’état courant de l’application.
Pros/Cons
Pros:
Cons:
Complexité
Types primitifs: null, boolean, int, long, float, double, bytes, string
Types complexes: record, enum, array, map, union, fixed
Backward (default)
Un nouveau schéma est rétro-compatible s'il peut être utilisé pour lire les données écrites dans tous les schémas précédents.
Forward
Un nouveau schéma est compatible en aval si tous les schémas précédents peuvent lire les données écrites dans ce schéma.
Full
Un nouveau schéma est entièrement compatible s'il est à la fois compatible en amont et en aval.
No compatibility
N'importe quel schéma à condition qu'il s'agisse d'un Avro valide.
Consumer
{ok}
{ok}
Poison Pill
Consumer
{ok}
Poison Pill
ERROR!
Comment éviter le problème ?
Spring Kafka à la rescousse! Configurer le ErrorHandlingDeserializer.
Attendre que la période de rétention du topic Kafka soit passée ?
Changer le groupe de consommateurs ?
Mettre à jour manuellement / automatiquement le décalage des messages (offsets)?
Dans la majorité des cas, logger les exceptions c'est suffisant mais parfois examiner les poisons pills s'avère nécessaire.
Configurer un ErrorHandlingDeserializer en combinaison avec un DeadLetterPublishingRecoverer et SeekToCurrentErrorHandler pour publier la valeur du message erroné dans un topic qui s'appelle dead letter.
Consumer
{ok}
Dead letter topic
{ok}
Publish
KStreams et KTables sont les deux principales abstractions qui représentent un flux de messages - qui sont des paires (clé, valeur)
L'intérêt d'un state store