Amazon Kinesis facilite la collecte, le traitement et l’analyse de données, en streaming et en temps réel afin de pouvoir réagir rapidement. Il est capable d’intégrer des données en temps réel, comme de la vidéo, de l’audio, des journaux d’applications, des flux de clics de site web ou encore des données de télémétrie IoT.

Amazon Kinesis permet de traiter et d’analyser des données à mesure de leur réception et de réagir instantanément au lieu d’attendre que toutes les données soient collectées pour démarrer leur traitement.

Il existe différents services Kinesis en fonction de votre besoin :

  • Amazon Kinesis Data Streams (KDS) : capture en continu des gigactets de donnĂ©es par seconde et les met Ă  disposition sur Amazon S3 ou auprès d’AWS Lambda Functions
  • Amazon Kinesis Data Firehose : charge de manière fiable les donnĂ©es de streaming dans des lacs de donnĂ©es, des magasins de donnĂ©es et des services d’analytique
  • Amazon Kinesis Data Analytics : transforme et analyse les donnĂ©es de streaming en temps rĂ©el avec SQL et Apache Flink
  • Amazon Kinesis Video Streams : diffuse de manière sĂ©curisĂ©e, de la vidĂ©o en streaming vers AWS

Voyons en détail ces services.



Amazon Kinesis Data Streams

Architecture générale

  • Il est composĂ© de Shards dont le nombre doit ĂŞtre initiĂ© Ă  la crĂ©ation
  • Le nombre de Shards dĂ©finit la dĂ©bit en entrĂ©e et en sortie des Streams
  • La durĂ©e de rĂ©tention des Messages peut aller de 1 Ă  365 Jours
  • Les messages sont immuables, ils ne peuvent pas ĂŞtre effacĂ©s ce qui autorise de rejouer les donnĂ©es si besoin
Principaux composants de Amazon Kinesis Data Streams
Principaux composants de Amazon Kinesis Data Streams
  1. Un ou plusieurs Producers envoient des Records au Kinesis Data Streams
  2. Le Kinesis Data Streams est un ensemble de Shards, un Shard étant une séquence unique de données dans un flux
  3. En écriture, chaque Shard supporte jusqu’à 1,000 records/sec et jusqu’à 1 Mo de données/sec
  4. En Lecture, cela dépend du mode du Consumers :
    • Shared : dĂ©bit partagĂ© par TOUS les Consumers de 2 Mo/sec par Shard
    • Enhanced : dĂ©bit pour CHAQUE Consumer de 2 Mo/sec par Shard

Fan-Out des Records

Affectation des Records dans les Shards
Affectation des Records dans les Shards
  1. Un Producer génère un Record avec une Partition Key et un contenu de 1 Mo au maximum
  2. En fonction du Hash MD5 de la Partition Key du Record, il est dirigé vers un des Shards
  3. Le Record reçoit un champ supplémentaire, le Sequence Number, indiquant son ordre de passage dans le Shard
  4. Le Consumer reçoit le Record suivant le mode de livraison Shared ou Enhanced Fan-Out

Hot Partition

Afin d’éviter qu’un Shard reçoive tous les Records, il faut veiller à ce que les valeurs de la Partition Key soient distribuées !

Sécurité

  • ContrĂ´le des accès et autorisations par des IAM Policies
  • Chiffrement en transit par HTTPS et au repos par KMS
  • Kinesis Data Streams peut ĂŞtre accèdĂ© au travers d’un VPC Endpoint, assurant une communication privĂ©e, sans passer par l’Internet
  • Les appels Ă  l’API Kinesis sont logguĂ©s dans CloudTrail

Kinesis Procucers

  • Les Producers envoient des donnĂ©es dans Kinesis Data Streams sous la forme de Records
  • Ils peuvent ĂŞtre :
    • Une application
    • Un Client Mobile ou Desktop
    • Une application tirant partie du AWS SDK (API Bas Niveau) ou du KPL (Kinesis Producer Library, API de Haut Niveau avec batch, compression, retries)
    • Un Kinesis Agent installĂ© sur un serveur et qui envoient, par exemple, des logs

L’utilisation de Batch avec l’API PutRecords permet de réduire les coûts et d’augmenter le débit

Erreur ProvisionedThroughputExceed

Lorsqu’un Shard reçoit plus de données qu’il ne peut en traiter, une erreur ProvisionedThroughputExceed est renvoyée au Producer.

Afin de s’en prémunir, il faut :

  • Veiller Ă  utiliser une valeur de Partition Key distribuĂ©e
  • ImplĂ©menter un mĂ©canisme de Retry avec un exponential backoff
  • Augmenter le nombre de Shards

Records

Il est fait de 3 éléments :

  • La Partition Key : dĂ©finie par le Producer, elle dĂ©termine dans quel Shard passera le record (en fonction de son Hash)
  • Le Data Blob : le contenu du message de 1 Mo au plus
  • La Sequence Number : dĂ©finie dans Kinesis Data Streams, il indique l’ordre de passage dans le Shard

Kinesis Consumers

  • Les Consumers reçoivent des donnĂ©es de Kenesis Data Streams sous la forme de Records
  • Ils peuvent ĂŞtre :
    • Une application utilisant le AWS SDK ou l’API KCL (pour Kinesis Client Library)
    • Une Lambda Function
    • Kinesis Data Firehose
    • Kinesis Data Analytics

SDK vs KCL

  • L’AWS SDK est une API bas-niveau nĂ©cessitant plus d’implĂ©mentation que l’API KCL de haut niveau qui implĂ©mente des mĂ©canismes de Retry, de vĂ©rification des Records traitĂ©s, de rĂ©action au Resharding,…
  • Ces 2 APIs prennent en compte les modes Shared et Enhanced, Ă  noter toutefois que pour KCL, seule la version V2 les prend en charge

Shared vs Enhanced

Le tableau ci-dessous résume les différences essentielles entre les modes Shared et Enhanced d’un Consumer :

CaractéristiqueShared fan-outEnhanced fan-out
Débit de lecture d’un ShardUn total de 2 Mo/s au maximum, réparti sur tous les ConsumersUn total de 2 Mo/s au maximum, pour chaque Consumer
Modèle de livraisonPull sur HTTP, utilise GetRecordsKinesis Data Streams vous envoie les enregistrements via HTTP/2, utilise SubscribeToShard
Délai de propagation des messagesEnviron 200 ms en moyenne par Consumer donc seulement 5 appels/sec pour l’API GetRecordsEnviron 70 ms en moyenne qu’il y ait 1 ou 5 Consumers (limité à 5 Consumers mais peut être étendu)
CoûtN/ACoût supplémentaire pour la récupération des données et l’utilisation des Shards

Kinesis Client Library (KCL)

  • Aide Ă  consommer et traiter les Kinesis Data Streams en prenant en charge de nombreuses tâches complexes associĂ©es Ă  l’architecture distribuĂ©e du Cloud
  • C’est une librairie Java mais elle peut s’interfacer avec d’autres langages
  • Chaque Shard ne peut ĂŞtre lu par une instance KCL au plus
  • Seule la version KCL 2.x gère le mode Enhanced
  • NĂ©cessite une table dans Amazon DynamoDB pour tracer les Shards traitĂ©s par chaque instance KCL et gĂ©rer les reprises
  • Une instance KCL peut ĂŞtre de type EC2, On Premise ou Elastic Beanstalk (du moment que les accès IAM sont bien configurĂ©s)

Dimensionnement des Shards

Shard Splitting

  • Augmente la capacitĂ© de Streaming (dĂ©bit) en augmentant le nombre de Shards (et le coĂ»t !)
  • Divise un Hot Shard

L’opération consiste en :

  • La crĂ©ation de 2 nouveaux Shards
  • La fermeture de l’ancien Shard et sa suppression une fois ses donnĂ©es expirĂ©es

C’est une opération manuelle uniquement (pas d’Auto Scaling possible) et 1 seul split par opération

Shard Merging

  • Diminue la capacitĂ© de Streaming (dĂ©bit) et diminue les coĂ»ts
  • Fusionne 2 Cold Shards dont le trafic est faible

L’opération consiste en :

  • La crĂ©ation d’1 nouveau Shard
  • La fermeture des anciens Shards et leur suppression une fois leurs donnĂ©es expirĂ©es

C’est une opération manuelle uniquement (pas d’Auto Scaling possible) et 1 seul merge par opération


Kinesis Data Firehose

Architecture générale de pipelines avec Kinesis Data Firehose
Architecture générale de pipelines avec Kinesis Data Firehose

Kinesis Data Firehose permet de charger des flux de données dans des data lakes, des data stores et des services d’analytique en y apportant des transformations au besoin :

  • C’est un Service AWS entièrement managĂ©, serverless et avec un dimensionnement automatique
  • Le coĂ»t est fonction des donnĂ©es qui passent dans Kinesis Data Firehose
  • Chargement quasi-temps rĂ©el :
    • Dans les 60 secondes suivant leur envoi au service
    • Dès le remplissage du Buffer (dont la taille dĂ©pend du service de destination et de sa configuration)
  • Supporte de nombreux formats de donnĂ©es, leur conversion, transformation, compression
  • Supporte les transformations personnalisĂ©es (sur AWS Lambda Functions)
  • Peut envoyer les donnĂ©es en erreur ou pour une sauvegarde dans un Bucket S3

Résumé

Kinesis Data StreamsKinesis Data Firehose
Service de Streaming à grande échelleService de Chargement de données streamées
Nécessite d’implémenter les Producer/ConsumerEntièrement managé
Temps réel (~200ms)“Quasi” temps réel (min de 60s)
Scaling manuelScaling automatique
Rétention des données de 1 à 365 jours
Rejeu possible
Pas de rétention des données
Pas de rejeu possible

Kinesis Data Analytics

Architecture générale de pipelines avec Kinesis Data Analytics
Architecture générale de pipelines avec Kinesis Data Analytics

Amazon Kinesis Data Analytics permet de requêter et d’analyser des flux de données en temps réel. Il est utile pour l’analyse en temps réel de time series, metrics ou la génération de dashboards :

  • BasĂ© sur Apache Flink, il prend en charge les applications en SQL, Java, Scala et Python
  • C’est un Service AWS entièrement managĂ©, serverless et avec un dimensionnement automatique
  • Le coĂ»t est fonction des donnĂ©es qui passent dans Kinesis Data Analytics
Jean-Jerome Levy

Ecrit par

Jean-JĂ©rĂ´me LĂ©vy

Consultant DevOps

Professionnel chevronné dans le domaine de l’informatique, cumulant plus de 20 années d’expérience au sein de DSI de grandes entreprises, mon expertise diversifiée m’a permis de jouer un rôle clé dans de nombreux projets, caractérisés par la mise en place de pratiques DevOps innovantes.