Pourquoi la valeur IteratorAgeMilliseconds continue à augmenter dans Kinesis Data Streams ?

Dernière mise à jour : 22/06/2022

La métrique IteratorAgeMilliseconds continue à augmenter dans Amazon Kinesis Data Streams. Pourquoi cela arrive-t-il ?

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.

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.
  • Augmentations des chevauchements 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 Répartition, mise à l'échelle et traitement parallèle.
  • Requêtes GetRecords insuffisantes : lorsque le consommateur n'envoie pas assez souvent de requêtes GetRecords, l’application consommateur peut prendre du retard. Pour vérifier, contrôlez les configurations de la bibliothèque client Amazon Kinesis (KCL) : withMaxRecords et withIdleTimeBetweenReadsInMillis.
  • IteratorAgeMilliseconds : si le consommateur utilise une fonction Lambda, le ralentissement du traitement peut être provoquée par des configurations dans le déclencheur Lambda (par exemple, une petite taille de lot). Le ralentissement du traitement des enregistrements peut également être dû au blocage des appels ou à l'approvisionnement en mémoire Lambda. Pour plus d'informations et pour résoudre les problèmes, consultez Configuration des options de la fonction Lambda.
  • Débit insuffisant ou MillisBehindLatest élevé : si vous utilisez Amazon Kinesis Data Analytics for SQL, consultez Débit insuffisant ou MillisBehindLatest élevé pour connaître les étapes de résolution du problème.

Si les consommateurs prennent du retard et qu'il y a 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 pour une durée maximale d'un an. Pour plus d'informations sur les périodes de conservation des données, consultez Modification de la période de conservation des données.

Limitations de lecture

Vérifiez la métrique ReadProvisionedThroughputExceeded pour voir s'il existe des limitations de lecture sur le flux.

Les limitations de lecture peuvent être causées par :

  • un ou plusieurs consommateurs ne respectant pas la limite de 5 appels GetRecords par seconde
  • un ou plusieurs consommateurs dépassant la limite de 1 000 enregistrements par seconde
  • un ou plusieurs consommateurs dépassant la limite de 1 Mio par seconde

Pour plus d'informations sur les limitations de lecture sur les flux Kinesis, consultez Comment détecter et résoudre les exceptions ReadProvisionedThroughputExceeded dans Kinesis Data Streams ?

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 confirme la cause de l'augmentation.

Remarque : une fonction Lambda peut renvoyer une erreur à cause d'une nouvelle tentative. Cela se produit parce qu’elle n'ignore pas les enregistrements en tant que consommateur de Kinesis. Lorsqu’il existe de nouvelles tentatives sur les enregistrements, les délais de traitement sont également augmentés. Votre consommateur prend alors du retard sur le flux, ce qui entraîne une augmentation de la métrique IteratorAgeMilliseconds.

Délai de connexion intermittent

Votre application consommateur peut rencontrer un problème de délai de connexion lors de l'extraction des enregistrements du flux de données Kinesis. Des erreurs de délai de connexion intermittent peuvent entraîner une augmentation significative du nombre de IteratorAgeMilliseconds.

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

Distribution inégale des données entre les partitions

Certaines partitions du flux de données Kinesis peuvent recevoir plus d'enregistrements que d'autres, car la clé de partition utilisée dans les opérations Put ne répartit pas équitablement les données entre les partitions. Cette distribution inégale des données entraîne une diminution du nombre d'appels GetRecords parallèles aux partitions des flux de données Kinesis, ce qui provoque une augmentation du comptage de IteratorAgeMilliseconds.

Si les données sont réparties de manière inégale entre les partitions du flux Kinesis, utilisez des clés de partition aléatoires. Les clés de partition aléatoires permettent aux applications client de lire les enregistrements plus rapidement.


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


Avez-vous besoin d'aide pour une question technique ou de facturation ?