Mise en œuvre de la détection basée sur des règles à l'échelle
par Jitesh Soni
Cet article présente un modèle réutilisable pour les charges de travail opérationnelles qui font vraiment la différence : détection de la fraude, surveillance des capteurs IoT, personnalisation en temps réel, traitement des signaux de sécurité — tout scénario où une réponse immédiate aux événements est essentielle pour les résultats de l'entreprise.
L'objectif principal : lorsqu'un événement semble suspect ou non valide, signalez-le immédiatement et orientez-le vers l'action appropriée en aval.
Dans ce blog, nous présentons une démonstration de détection d'anomalies sur les transactions de la blockchain Ethereum. Nous analysons les données de la blockchain Ethereum et signalons les transactions présentant des schémas non valides en temps réel. Plus précisément, nous détectons :
gas_used > gas_limit sont physiquement impossibles selon le protocole Ethereum, ce qui indique une corruption des données, des bugs du producteur ou des échecs d'analyse de schémaextra_data contenant des modèles identifiables de PII ou d'identifiants (adresses e-mail, jetons JWT, clés d'accès AWS) signale une fuite de données ou des producteurs mal configurésBien que nous utilisions les données Ethereum pour cette démonstration, cette classification « suspect ou non valide » s'applique à de nombreux cas d'usage à forte valeur ajoutée :
La même logique de détection s'applique directement à n'importe quel domaine : transactions financières contenant des PII inattendues, charges utiles IoT avec des relevés de capteurs hors plage, ou journaux d'événements API contenant des secrets qui auraient dû être masqués. Le flux Ethereum fournit un ensemble de données propre et reproductible pour illustrer ce modèle à grande échelle.
Le mode Real-Time (RTM) est un nouveau type de déclencheur pour Apache Spark™ Structured Streaming qui offre une latence de l'ordre de la milliseconde aux API Spark — sans nécessiter de moteur spécialisé distinct comme Apache Flink.
Alors que le mode micro-batch par défaut de Structured Streaming fonctionne comme une navette d'aéroport qui attend de se remplir avant de partir, le RTM fonctionne comme un trottoir roulant à grande vitesse, traitant chaque événement à mesure qu'il arrive. Il y parvient grâce à trois innovations architecturales : le flux de données continu (les événements sont traités à mesure qu'ils arrivent, et non par blocs distincts), la planification de pipeline (toutes les étapes de la requête s'exécutent simultanément, sans blocage) et le streaming shuffle (les données sont transmises immédiatement en mémoire entre les tâches, en évitant le disque).
Le RTM est conçu spécifiquement pour les charges de travail opérationnelles où la latence a un impact direct sur les résultats de l'entreprise — détection de la fraude, personnalisation en temps réel, calcul de caractéristiques ML et surveillance IoT. Pour les charges de travail qui peuvent tolérer 1 à 2 secondes de latence, le micro-batch traditionnel reste le choix le plus rentable.
Le mode Real-Time change fondamentalement la donne avec Apache Spark. Les latences de bout en bout allant de ~5 ms à ~300 ms, selon la complexité de la charge de travail, propulsent Spark sur le terrain auparavant dominé par les moteurs de traitement de flux spécialisés. Le micro-batch traditionnel offre une latence de 1 à 2 secondes ; le mode Real-Time atteint ~5 ms à ~300 ms.
L'architecture y parvient grâce à des pipelines d'exécution pré-alloués et à un checkpointing asynchrone, éliminant la surcharge de planification qui limitait traditionnellement le traitement par micro-batch. Pour les charges de travail opérationnelles où chaque milliseconde compte — détection de la fraude, surveillance IoT, offres en temps réel — ce niveau de performance est transformateur.
Les entreprises sont souvent confrontées à une idée reçue coûteuse : « Spark n'est pas assez performant pour les cas d'usage en temps réel, nous avons donc besoin d'une stack entièrement distincte pour ce besoin spécifique. »
Pour les charges de travail tolérant 1 à 2 secondes de latence, le micro-batch de Spark transfère de manière fiable les données dans Delta Lake avec d'excellentes performances à un coût optimisé. Pour les charges de travail opérationnelles exigeant des temps de réponse inférieurs à la seconde, le mode Real-Time élimine complètement le besoin de technologies distinctes — comme l'ont validé les équipes de Coinbase, DraftKings et MakeMyTrip, qui ont regroupé leurs activités sur une seule stack basée sur Spark pour leurs charges de travail analytiques et opérationnelles.
Avec le mode Real-Time, Spark gère à la fois les charges de travail analytiques (de l'ordre de la seconde) et opérationnelles (de l'ordre de la milliseconde) au sein d'une plateforme unique et unifiée. Cela permet de réduire :
L'aspect le plus séduisant du mode Real-Time est sans doute sa remarquable simplicité pour les développeurs déjà familiers avec Structured Streaming. L'activation de cette puissante fonctionnalité ne nécessite aucune migration complexe ni restructuration fondamentale du code.
Les entreprises peuvent débloquer une latence de l'ordre de la milliseconde en modifiant simplement la configuration du déclencheur :
C'est tout. La même API Structured Streaming familière. La même gestion des checkpoints. La même sémantique de livraison au moins une fois. Juste un changement de configuration pour activer une intelligence opérationnelle inférieure à la seconde.
Remarque sur les garanties de livraison : le RTM avec un récepteur Kafka fournit des garanties de livraison au moins une fois. Les consommateurs en aval doivent gérer les doublons potentiels via des écritures idempotentes ou une logique de déduplication.
Cette intégration transparente représente un avantage crucial. Les équipes peuvent prototyper et mettre en production des charges de travail opérationnelles sans la lourde charge d'apprentissage, de déploiement et de gestion de stacks technologiques entièrement distinctes. Cette approche accélère considérablement l'innovation tout en réduisant les risques traditionnellement associés à l'adoption de nouvelles capacités en temps réel.
Après avoir établi l'importance du mode Real-Time, examinons comment mettre en œuvre ce modèle en pratique. Les sections suivantes présentent un pipeline de garde-fous prêt pour la production — le modèle opérationnel qui transforme ces capacités en valeur commerciale.

Chaque événement entrant fait l'objet d'une évaluation immédiate, produisant un événement enrichi en aval contenant :
ALLOW par rapport à QUARANTINECe modèle opérationnel sert de source unique de vérité pour la prise de décision en temps réel :
Bien que notre démonstration utilise des données de blocs Ethereum, ce modèle s'applique universellement : transactions financières, relevés de capteurs, journaux d'authentification, appels API — l'architecture reste cohérente.
Fidèles à notre engagement de fournir des solutions de qualité production, nous avons validé ce modèle à grande échelle. La chaîne Ethereum complète — environ 95 GB répartis sur 4 partitions, représentant environ 23 millions de messages — a été chargée dans Kafka pour les tests.
Nous implémentons des règles de validation intentionnellement simples et à fort signal :
Analysez le champ extra_data à la recherche de motifs qui indiquent clairement des données qui ne devraient pas être présentes dans les flux de production. Les exemples de code illustrent une détection de motifs de base (adresses e-mail, jetons JWT, formats de clés AWS).
Les organisations doivent les remplacer par des règles spécifiques à leurs exigences de conformité — motifs PII, identifiants internes, identifiants API et autres données sensibles similaires.
L'élément clé : Les garde-fous en temps réel doivent être intégrés au pipeline dans le cadre d'une gouvernance unifiée, et non découverts lors de l'analyse post-incident.
gas_used > gas_limit
Cette condition ne devrait jamais se produire dans des données valides. Lorsqu'elle est détectée, elle indique l'un des problèmes suivants :
D'un point de vue opérationnel, c'est précisément le type d'anomalie que nous voulons signaler immédiatement — permettant une réponse rapide avant que les systèmes en aval ne soient affectés.
Une fois notre logique de validation établie, nous passons à la configuration du streaming qui permet une exécution en moins d'une seconde.
Le mode Real-Time est activé via le déclencheur (trigger) temps réel et fonctionne en mode update. En PySpark, vous spécifiez un paramètre d'intervalle (par exemple, "5 minutes").
update avec les déclencheurs (triggers) RTMConfiguration utilisée dans cette démo :
Consultez le dépôt associé pour obtenir le fichier cluster_config.template.json complet.
Ce pipeline à passage unique démontre une intégration transparente entre Kafka et le mode Spark Real-Time :
Vous pouvez lire le code ici.
Nous avons validé les performances du mode Real-Time en traitant les données de la blockchain Ethereum — environ 23 millions de messages répartis sur 4 partitions Kafka en mode streaming continu.
Le pipeline a présenté des caractéristiques de débit impressionnantes :
Les journaux du pilote (driver logs) capturent des mesures de latence détaillées via l'événement spark.streaming.madeProgress. Le mode Real-Time signale processingLatencyMs, qui mesure le temps écoulé entre le moment où la requête lit un enregistrement et celui où elle l'écrit dans le récepteur (sink) en aval.
Pour ce pipeline de validation sans état (stateless) traitant environ 23 millions d'enregistrements, nous avons observé :
rtmMetrics.processingLatencyMs de StreamingQueryProgress avec des percentiles (P0, P50, P90, P95, P99). Pour un pipeline Kafka-to-Kafka à étape unique comme celui-ci, elle représente concrètement la latence de bout en bout par enregistrement.Remarque : Ces résultats représentent les performances sur un pipeline de validation sans état (stateless). Des opérations avec état (stateful) plus complexes (agrégations, fenêtrage) peuvent présenter des latences plus élevées, de l'ordre de ~5 ms à ~300 ms pour le RTM, selon la complexité de la charge de travail.
Ces mesures valident que le mode Real-Time offre une latence inférieure à la milliseconde de qualité production (P95 0,5 ms, P99 = 1 ms) tout en traitant des flux à haut volume à près de 70 000 lignes/seconde — éliminant ainsi le compromis traditionnel entre plateformes unifiées et exigences de faible latence.
Le mode Real-Time étend Apache Spark™ Structured Streaming à une nouvelle classe de charges de travail — des applications opérationnelles et sensibles à la latence qui exigent une réponse immédiate aux données en streaming. En apportant une latence inférieure à la seconde aux API Spark que votre équipe utilise déjà, il élimine le besoin d'exploiter un moteur spécialisé distinct pour vos pipelines les plus critiques en termes de temps.
La proposition de valeur est convaincante :
Que vous construisiez des pipelines de détection des fraudes, des moteurs de personnalisation ou des systèmes de calcul de caractéristiques (features) ML, le mode Real-Time offre la latence requise par votre application tout en préservant la simplicité et la richesse de l'écosystème de Spark.
Clonez le dépôt associé pour exécuter ce pipeline de garde-fous de bout en bout — il comprend l'implémentation complète, la configuration du cluster et le guide de déploiement.
Pour aller plus loin, consultez la documentation du mode Real-Time pour connaître les options de configuration et les sources/récepteurs (sinks) pris en charge, ou regardez la présentation technique approfondie du mode Real-Time pour découvrir l'architecture complète.
(Cet article de blog a été traduit à l'aide d'outils basés sur l'intelligence artificielle) Article original
Abonnez-vous à notre blog et recevez les derniers articles directement dans votre boîte mail.