Pourquoi ai-je des problèmes de latence élevés avec Kinesis Data Streams ?

Lecture de 3 minute(s)
0

Je souhaite savoir pourquoi mon Amazon Kinesis Data Stream présente une latence élevée lors de l’obtention d’enregistrements de données.

Brève description

GetRecords.Latency peut augmenter en cas d’augmentation du nombre d’enregistrements ou de la taille des enregistrements pour chaque requête GET. Si vous redémarrez votre application pendant que le producteur ingère des données dans le flux, les enregistrements peuvent s’accumuler sans être consommés. Cette augmentation du nombre d’enregistrements ou de la quantité de données à extraire augmente la valeur de GetRecords.Latency. Si une application ne parvient pas à rattraper le taux d’ingestion, l’IteratorAge augmente.

Remarque : l’activation du chiffrement côté serveur sur votre flux de données Kinesis peut augmenter votre latence.

Résolution

Surveillez le service Kinesis Data Streams avec Amazon CloudWatch. Vérifiez les métriques de CloudWatch, telles que GetRecords.Latency, pour vérifier si l’augmentation de latence est continue. Si l’augmentation de la latence est continue, vérifiez s’il y a également une augmentation des métriques IncomingRecords, IncomingBytes, GetRecords.Records et GetRecords.Bytes dans CloudWatch. À mesure que les volumes de données augmentent, ces mesures augmentent et entraînent une latence élevée. Cette augmentation est due au fait que lorsque davantage d’enregistrements sont disponibles dans le flux de données Kinesis, GetRecords en extrait davantage.

Si votre IteratorAge a également augmenté, il y a probablement plus d’IncomingBytes dans le flux. Vérifiez la métrique IncomingBytes dans CloudWatch pour vérifier si le nombre d’octets a augmenté. Vous pouvez vérifier si le flux reçoit moins d’appels GetRecords. Un plus grand nombre d’octets entrants indique que chaque appel GetRecords extrait davantage de données et augmente la valeur de GetRecords.Latency.

Si vous continuez à observer une latence élevée (même en l’absence d’augmentation d’IncomingBytes ou d’IncomingRecords), un excès de données entrantes est possible. Si l’application grand public ne parvient pas à rattraper les données entrantes, celles-ci continuent de s’accumuler dans le flux de données Kinesis. Même si vous redémarrez l’application, d’autres enregistrements sont récupérés lors de chaque appel GetRecords. L’augmentation du nombre d’enregistrements ou de données extraites pour chaque appel GetRecords augmente alors la valeur de GetRecords.Latency.

Pour résoudre ce problème, procédez comme suit :

  • Vérifiez dans votre application si suffisamment d’appels GetRecords sont passés pour traiter le volume de données entrantes. Si vous utilisez l’application Amazon Kinesis Client Library (KCL) ou AWS Lambda en tant que client, augmentez le nombre de partitions dans votre flux. Une augmentation du nombre de partitions augmente le taux de consommation du flux de diffusion et diminue les valeurs d’IteratorAge et de GetRecords.Latency.
  • Augmentez la durée de conservation du flux de données Kinesis pour éviter toute perte de données. Une période prolongée de conservation peut permettre à votre application de rattraper le backlog de données.
  • Si vous avez une application client, vérifiez la logique de traitement et enregistrez le temps de traitement.
  • Vérifiez l’unité centrale (CPU) et l’utilisation de la mémoire de votre système pour voir s’il faut libérer de la mémoire.
AWS OFFICIEL
AWS OFFICIELA mis à jour il y a 5 mois