Pourquoi la valeur IteratorAgeMilliseconds ne cesse d'augmenter dans Kinesis Data Streams ?

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

La métrique IteratorAgeMilliseconds continue d'augmenter dans Amazon Kinesis Data Streams. Pourquoi ?

Brève description

L'augmentation de la métrique IteratorAgeMilliseconds dans Kinesis Data Streams peut être due à l'une des raisons suivantes :

  • un traitement lent des enregistrements ;
  • des limitations de lecture ;
  • une erreur de la fonction AWS Lambda ;
  • un délai de connexion.

Résolution

Traitement lent des enregistrements

Une surcharge de la logique de traitement des consommateurs peut contribuer à ralentir le traitement des enregistrements. Si le consommateur est créé à l'aide de la bibliothèque client Amazon Kinesis Client Library (KCL), recherchez les causes racines suivantes :

  • Ressources physiques insuffisantes : vérifiez si votre instance dispose de quantités suffisantes de ressources physiques telles que l'utilisation de la mémoire ou de l'UC pendant les pics de demande.
  • Échec de mise à l'échelle : la mise à l'échelle de la logique de traitement des enregistrements de consommateurs peut échouer en raison de l'augmentation de la charge du flux de données Amazon Kinesis. Vous pouvez l'observer en surveillant les autres métriques Amazon CloudWatch personnalisées transmises par KCL, associées aux opérations suivantes : processTask, RecordProcessor.processRecords.Time, Success et RecordsProcessed. Vous pouvez également vérifier le débit global du flux de données Kinesis en surveillant les métriques CloudWatch IncomingBytes et IncomingRecords. Pour plus d'informations sur la KCL et les métriques CloudWatch personnalisées, consultez la section Surveillance de la bibliothèque client Kinesis avec Amazon CloudWatch. Toutefois, lorsqu'il est impossible de réduire la durée du traitement, vous devez mettre à l'échelle le flux Kinesis en augmentant le nombre de partitions.
  • Expiration des données : si les consommateurs prennent du retard et qu'il existe un risque d'expiration des données, augmentez la période de conservation du flux. Par défaut, la période de conservation est de 24 heures et peut être configurée jusqu'à 7 jours. Pour plus d'informations sur les périodes de conservation des données, consultez la section Modification de la période de conservation des données.
  • Augmentations du chevauchement de traitement : vérifiez la logique de traitement des enregistrements du consommateur. Si vous constatez une augmentation de la valeur processRecords.Time qui ne correspond pas à l'augmentation de la charge du trafic, vérifiez votre logique de traitement des enregistrements. Celle-ci peut effectuer des appels de blocage synchrones qui entraînent des retards dans le traitement des enregistrements de consommateurs. Une autre pratique consiste à augmenter le nombre de partitions de vos flux de données Kinesis. Pour plus d'informations sur le nombre de partitions nécessaires, consultez la section Repartitionnement, mise à l'échelle et traitement parallèle.
  • Demandes GetRecords insuffisantes : lorsque le consommateur n'envoie pas assez souvent de demandes GetRecords, celui-ci peut prendre du retard.

des limitations de lecture ;

Vérifiez la métrique ReadProvisionedThroughputExceeded pour voir s'il existe des limitations de lecture sur le flux. Pour plus d'informations sur les limitations de lecture des flux Kinesis, consultez la section Surveillance du service Amazon Kinesis Data Streams avec Amazon CloudWatch.

Erreur de la fonction Lambda

Dans Amazon CloudWatch, examinez les fonctions Lambda du flux pour lequel la valeur IteratorAgeMilliseconds ne cesse d'augmenter. Vous pouvez identifier les erreurs qui entraînent une augmentation de la valeur IteratorAgeMilliseconds en consultant le récapitulatif des erreurs dans CloudWatch. Vérifiez si l'horodatage de l'erreur de la fonction Lambda correspond à l'heure de l'augmentation de la métrique IteratorAgeMilliseconds de votre flux de données Kinesis. La correspondance de l'horodatage vient confirmer la cause de l'augmentation.

Remarque : une fonction Lambda peut lever une erreur lorsqu'elle fait l'objet d'une nouvelle tentative. Cela peut se produire quand elle n'ignore pas les enregistrements en tant que consommateur de Kinesis. Au fur et à mesure que ces enregistrements sont relancés, les délais de traitement sont également augmentés. Votre consommateur prend alors du retard par rapport au flux, provoquant une augmentation de la métrique IteratorAgeMilliseconds.

un délai de connexion.

Votre fonction Lambda peut rencontrer un problème de délai de connexion lors de l'extraction des enregistrements du flux de données Kinesis. Un délai de connexion peut entraîner une augmentation significative de la valeur IteratorAgeMilliseconds.

Pour vérifier si l'augmentation est liée à un délai de connexion, inspectez les métriques GetRecords.Latency et GetRecords.Success. Si ces deux métriques sont également impactées, IteratorAgeMilliseconds cesse d'augmenter une fois la connexion restaurée.