Le Blog Amazon Web Services

Traitement basé sur le streaming sans serveur pour avoir des informations en temps réel

L’adoption de l’analyse en continu (« streaming » en anglais) offre à nos clients un avantage important en permettant l’exploitation des informations en temps réel. Grâce à la capacité d’analyser et d’agir sur les données au fur et à mesure de leur génération, nos clients peuvent prendre des décisions agiles basées sur leurs données, améliorer leur efficacité opérationnelle, offrir des expériences clients optimisées et obtenir un avantage concurrentiel dans le paysage numérique actuel. Dans cet article, nous allons explorer le traitement basé sur le streaming et la manière dont il vous aide à obtenir un traitement de données à faible latence dans vos applications.

AWS propose deux services gérés pour le streaming, Amazon Kinesis et Amazon Managed Streaming for Apache Kafka (Amazon MSK).

Qu’est-ce que les données diffusées en continu, dites “streams” ?

Chez AWS, nous définissons les données diffusées en continu, ou streaming, comme des données émises à un volume élevé, de manière continue et incrémentale, dans le but de les traiter avec une faible latence. Alors que l’informatique décisionnelle traditionnelle en batch peut offrir des informations rétrospectives après des mois, des jours ou des heures, le traitement en continu permet de proposer des informations exploitables en temps réel. Le traitement en continu est couramment utilisé pour répondre aux événements de flux de clics, ingérer rapidement divers types de journaux et extraire, transformer et charger (ETL) des données en temps réel dans des data lakes et des entrepôts de données.

Amazon Kinesis est le service AWS qui facilite la collecte, le traitement et l’analyse de données en streaming en temps réel grâce à quatre fonctionnalités différentes :

Dans cet article, nous nous concentrons sur Kinesis Data Streams et Kinesis Data Firehose, car ces deux services sont fondamentaux pour le streaming, l’ingestion, la mise en mémoire tampon et le traitement dans votre pipeline de données en continu.

Amazon Kinesis Data Streams

Amazon Kinesis Data Streams (KDS) est un service de diffusion de données en temps réel extrêmement évolutif et durable. KDS peut capturer en continu des gigaoctets de données par seconde à partir de centaines de milliers de sources. À l’instar de nombreux systèmes distribués, Kinesis Data Streams atteint ce niveau d’évolutivité par le partitionnement de vos données, où les enregistrements sont simultanément écrits et lus dans différents fichiers en parallèle. 

Tous les flux de données Kinesis nécessitent l’allocation d’au moins une partition (Shard) et vous choisissez le nombre de partition que vous souhaitez allouer à un flux donné.

Lors de l’écriture dans un flux de données Kinesis, une seule partition peut intégrer jusqu’à 1 Mo de données par seconde (y compris les clés de partition) ou 1 000 enregistrements par seconde. 

Lors de la lecture d’une partition, chaque partition peut prendre en charge une vitesse de lecture permettant d’atteindre jusqu’à 2Mo par secondeVous choisissez un nombre initial de partitions à allouer à votre flux de données Kinesis, puis vous pouvez mettre à jour votre allocation de partitions au fil du temps. L’augmentation de votre allocation de partitions permet à votre application de passer facilement de milliers d’enregistrements à des millions d’enregistrements écrits par seconde.

Production de données en continu

Les producteurs de données en continu sont des processus qui mettent des enregistrements sur un flux Kinesis en appelant l’API putRecord pour écrire un seul enregistrement ou l’API putRecords pour écrire plusieurs enregistrements en une seule invocation. Les approches courantes pour produire des messages incluent l’utilisation directe des outils AWS, notamment :

  • AWS SDK, qui simplifie l’authentification et d’autres sémantiques d’invocation des API de services AWS.
  • Amazon Kinesis Agent, qui permet de surveiller les fichiers/journaux locaux et de gérer les rotations de fichier en temps-réel.
  • Bibliothèque producteur Amazon Kinesis (Kinesis Producer Library – KPL), qui simplifie l’agrégation des enregistrements dans des applications plus importantes pour améliorer le débit.

En outre, plusieurs services AWS s’intègrent nativement à Amazon Kinesis en tant que producteur de données :

Il existe également plusieurs services tiers qui offrent une intégration native en tant que producteurs de données, notamment:

Quel que soit le service ou outil de production choisi, tous les producteurs de données mettent des enregistrements dans un flux en fournissant une clé de partition, un nom de flux et les données elles-mêmes, dont la taille totale ne doit pas dépasser 1 Mo. La clé de partition fournie est utilisée pour déterminer dans quelle partition les données doivent être écrites. Amazon Kinesis Data Streams offre des garanties d’ordonnancement et maintient l’ordre des messages dans une partition donnée dans un flux en utilisant des numéros de séquence pour suivre la position unique de chaque message envoyé.

Kinesis Data Stream message

Consommation des données en continu

Une fois que les enregistrements sont écrits dans un flux de données Kinesis, ils sont mis en tampon dans leurs partitions respectives pour être consommés. Contrairement à un traitement basé sur un file d’attente par exemple, les enregistrements sont mis en tampon jusqu’à ce que la période de rétention des données définie sur le flux soit écoulée, ce qui permet à un ou plusieurs consommateurs de rejouer tous les messages dans les partitions du flux. Si votre application doit livrer vos enregistrements à un data lake, un entrepôt de données, un cluster OpenSearch ou Splunk, Kinesis Data Firehose peut livrer vos enregistrements de manière native aux destinataires suivants sans avoir à écrire de code personnalisé :

  • Amazon S3,
  • Amazon Redshift,
  • Amazon OpenSearch Service,
  • Splunk.

Il vous suffit d’indiquer la destination de livraison souhaitée et la configuration concernant le mode pour la gestion des batchs et de livraison des messages. Kinesis Data Firehose peut également utiliser les noms d’objets S3 souhaités que vous avez configurés, les noms de tables Amazon Redshift, les noms d’index Amazon OpenSearch, etc.

Pour un traitement personnalisé ou des destinations en dehors des services pris en charge par Amazon Kinesis Data Firehose ci-dessus, vous devrez écrire et exécuter un code personnalisé pour consommer les données du flux. Bien que vous puissiez utiliser la bibliothèque Kinesis Client Library (KCL) pour exécuter votre propre application de traitement personnalisé sur des machines virtuelles persistantes ou des instances de conteneurs, AWS Lambda offre un service de calcul sans serveur avec une intégration native de source d’événements avec Amazon Kinesis Data Streams. AWS Lambda, en tant que consommateur de flux, prend en charge les opérations tel que la lecture des partitions, le maintien de l’ordre des enregistrements, le point de contrôle à mesure que les enregistrements sont traités et la parallélisation du traitement.

Traitement des données en streaming sans serveur avec AWS Lambda

Lorsqu’il est configuré avec un flux Kinesis comme source d’événements, AWS Lambda interroge en continu chaque partition de votre flux sans frais supplémentaire et n’invoque votre code Lambda que si et quand le flux contient des messages.

Il augmente en outre le nombre d’exécutions simultanées pour paralléliser la lecture de toutes les partitions d’un flux en même temps (et peut avoir plusieurs exécutions lisant la même partition simultanément pour un facteur de parallélisation plus élevé, si vous le souhaitez). AWS Lambda vérifie automatiquement quels enregistrements ont été traités avec succès et gère automatiquement les tentatives et les échecs éventuels selon la configuration.

Enfin, il n’y a aucun coût supplémentaire pour le service Lambda qui gère toutes ces opérations pour vous. Vous ne payez que le temps de calcul lorsque votre fonction est réellement invoquée. Les messages sont disponibles sur le flux pour être traités. Donc, vous pouvez vous concentrer sur votre logique métier du traitement de données puisque vos enregistrements sont envoyés sous forme de tableau à votre code Lambda. Il n’y a pas de code supplémentaire à créer/gérer concernant le point de contrôle, les divisions/fusions de partitions ou d’autres complexités.
processing with AWS Lambda

Conclusion

Dans cet article, nous avons défini ce qu’était la diffusion de données en continu et nous avons exploré le service Amazon Kinesis et ses différentes capacités. Nous avons ensuite passé en revue les différentes options disponibles pour produire et consommer des données diffusées en continu en temps réel avec Amazon Kinesis, notamment l’utilisation d’AWS Lambda pour le traitement des données diffusées en continu sans serveur. Veuillez vous référer aux ressources suivantes pour en savoir plus sur le traitement des données diffusées en continue dans AWS :

Article original contribué par Justin Pirtle, Architecte de solutions spécialisé sur les technologies sans serveur et adapté en français par Weibo GU, Architecte de Solutions dans l’équipe AWS France.