Streaming e-commerce temps réel avec Flink et Kafka
Un TP de traitement de flux où les commandes créées via une API Node.js passent par Kafka et sont analysées en direct par un job Apache Flink : fenêtres en temps d'événement, enrichissement et détection de motifs de paiement suspects.

Aperçu
J'ai réalisé ce projet dans le cadre d'un TP universitaire sur le traitement de flux. Une API Node.js/Express enregistre chaque commande dans MongoDB et publie un événement de paiement par produit dans un topic Kafka (servi par Redpanda). Un job Apache Flink DataStream écrit en Java consomme ce topic, enrichit les événements avec la catégorie du produit et calcule des statistiques glissantes et des alertes. Toute la stack tourne en local avec Docker Compose.
Le problème
Une plateforme e-commerce a besoin de réponses pendant que les événements arrivent : combien chaque produit se vend en ce moment, à quelle fréquence les paiements d'un utilisateur réussissent, et si une série d'échecs de paiement paraît suspecte. Un rapport batch calculé plus tard arrive trop tard.
Ce que j'ai construit
J'ai écrit un endpoint Express qui enregistre les commandes dans MongoDB avec Mongoose et envoie les événements de paiement dans Kafka avec KafkaJS. Côté Flink, le job lit le topic avec le connecteur Kafka, parse le JSON avec Jackson et attribue les horodatages en temps d'événement avec un watermark tolérant 5 secondes de désordre. Les paiements sont enrichis avec la catégorie du produit grâce au broadcast state, puis agrégés dans une fenêtre fixe d'une minute par produit, une fenêtre fixe d'une minute par catégorie et une fenêtre glissante de 5 minutes par utilisateur (taux de réussite). Flink CEP détecte au moins trois paiements échoués consécutifs suivis d'un succès en moins de 10 minutes et lève une alerte.
Résultats
- Pipeline complet et fonctionnel : API REST → MongoDB + Kafka → job Flink
- Trois agrégations fenêtrées (par produit, par catégorie, par utilisateur) en temps d'événement
- Alerte CEP sur les échecs de paiement répétés suivis d'un succès
- Stack Docker Compose avec JobManager et TaskManager Flink, Redpanda et l'API backend
Points clés
- Traitement en temps d'événement avec watermarks à désordre borné
- Broadcast state pour enrichir les paiements avec la catégorie produit
- Fenêtres fixes et glissantes avec ProcessWindowFunction
- Traitement d'événements complexes avec les motifs Flink CEP
- API de commandes qui écrit dans MongoDB et produit dans Kafka en une seule requête
- JAR autonome construit avec le plugin Maven Shade et soumis au cluster
