Pourquoi est-ce que je rencontre des problèmes de latence élevée avec Kinesis Data Streams ?

Dernière mise à jour : 04/06/2020

Mon flux de données Amazon Kinesis connaît une latence élevée lors de l'obtention d'enregistrements de données. Quelle est la cause de ce problème, et comment puis-je le résoudre ?

Brève description

La métrique GetRecords.Latency peut augmenter lors d'une hausse du nombre d'enregistrements ou de la taille des enregistrements pour chaque demande GET. Si vous avez tenté de redémarrer votre application pendant que le producteur ingérait des données dans le flux, les enregistrements peuvent s'accumuler sans être consommés. Cette hausse du nombre d'enregistrements ou de la quantité de données à extraire augmente la valeur de GetRecords.Latency. De plus, la valeur IteratorAge augmente également lorsqu'une application n'est pas en mesure de rattraper le taux d'ingestion.

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

Résolution

Surveillez le service Amazon Kinesis Data Streams avec Amazon CloudWatch. Vérifiez les métriques CloudWatch telles que GetRecords.Latency pour savoir si l'augmentation de la latence est continue. Si tel est le cas, vérifiez si CloudWatch indique également une augmentation des métriques IncomingRecords, IncomingBytes, GetRecords.Records et GetRecords.Bytes. Ces métriques augmentent parallèlement aux volumes de données, ce qui entraîne une latence élevée. Cette augmentation se produit car GetRecords récupère davantage d'enregistrements lorsqu'il y a plus d'enregistrements disponibles dans le flux de données Kinesis.

Si votre métrique IteratorAge a également augmenté, cela signifie probablement que le flux contient un plus grand nombre d'octets entrants, ce qui correspond à la métrique IncomingBytes. Vérifiez la métrique IncomingBytes dans CloudWatch pour voir si le nombre d'octets a augmenté. Vous pouvez également vérifier si moins d'appels GetRecords ont été effectués vers le flux. La hausse du nombre d'octets entrants indique que chaque appel GetRecords récupère plus de données, ce qui augmente la valeur de GetRecords.Latency.

Si vous constatez toujours une latence élevée (même s'il n'y a pas d'augmentation des métriques IncomingBytes ou IncomingRecords), la cause peut être un trop grand nombre de données entrantes. Lorsque l'application consommateur n'est pas en mesure de 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, davantage d'enregistrements sont récupérés au sein de chaque appel GetRecords . La hausse des enregistrements ou des données récupérées pour chaque appel GetRecords augmente ensuite la valeur de GetRecords.Latency.

Pour corriger cette erreur, suivez les conseils de dépannage suivants :

  • Vérifiez votre application pour voir si suffisamment d'appels GetRecords sont effectués pour traiter le volume de données entrantes. Si vous utilisez l'application Amazon Kinesis Client Library (KCL) ou AWS Lambda comme application consommateur, augmentez le nombre de partitions dans votre flux. Une hausse du nombre de partitions augmente le taux de consommation du flux de diffusion, tout en diminuant les valeurs IteratorAge et GetRecords.Latency.
  • Augmentez la période de conservation du flux de données Kinesis pour éviter toute perte de données. Une période de rétention plus longue peut aider votre application à rattraper le retard des données en attente.
  • Si vous disposez de votre propre application consommateur, vérifiez la logique de traitement et enregistrez le temps de traitement.
  • Vérifiez l'utilisation du processeur (CPU) et de la mémoire de votre système pour voir si vous avez besoin de libérer plus de mémoire.

Cet article vous a-t-il été utile ?

Cette page peut-elle être améliorée ?


Vous avez besoin d'aide ?