Pourquoi la valeur IteratorageMilliseconds dans Kinesis Data Streams continue-t-elle d'augmenter ?

Lecture de 5 minute(s)
0

La métrique IteratorageMilliseconds continue d'augmenter dans Amazon Kinesis Data Streams.

Brève description

La métrique IteratorAgeMilliseconds dans Kinesis Data Streams peut augmenter pour les raisons suivantes :

  • Traitement lent des enregistrements
  • Limitation des lectures
  • Erreur de la fonction Lambda
  • Délai d’expiration de la connexion
  • Distribution inégale des données entre les partitions

Résolution

Traitement lent des enregistrements

Une surcharge de la logique de traitement du consommateur peut contribuer à ralentir le traitement des enregistrements. Si la bibliothèque Amazon Kinesis Client Library (KCL) est utilisée pour créer le consommateur, vérifiez les causes racines suivantes :

  • Ressources physiques insuffisantes : Pendant les pics de demande, vérifiez si votre instance dispose de ressources physiques adéquates, telles que l'utilisation de la mémoire ou du processeur.
  • Défaut de mise à l'échelle : La logique de traitement des dossiers des consommateurs peut ne pas s'adapter à l'augmentation de la charge du flux de données Amazon Kinesis. Pour vérifier les échecs de mise à l’échelle, vous pouvez surveiller les autres métriques Amazon CloudWatch personnalisées à partir de la KCL. Ces métriques sont associées aux opérations processTask, RecordProcessor.processRecords.Time, Success et RecordsProcessed. Vous pouvez également surveiller les métriques CloudWatch IncomingBytes et IncomingRecords pour vérifier le débit global du flux de données Kinesis. Pour plus d'informations sur la KCL et les métriques CloudWatch personnalisées, consultez la section Surveillance de la bibliothèque Kinesis Client Library avec Amazon CloudWatch. Si vous ne parvenez pas à réduire le temps de traitement, augmentez le nombre de partitions pour améliorer le flux Kinesis.
  • Le chevauchement des traitements augmente : Si vous constatez une augmentation de la valeur processRecords.Time qui n'est pas corrélée à l'augmentation de la charge de trafic, vérifiez la logique de traitement de vos enregistrements de consommateurs. Votre logique de traitement des enregistrements peut émettre des appels bloquants synchrones qui peuvent entraîner des retards dans le traitement des enregistrements de consommateurs. Vous pouvez également augmenter le nombre de partitions dans vos flux de données Kinesis pour résoudre ce problème. Pour plus d'informations sur le nombre de partitions dont vous avez besoin, consultez la section Redéfinition, mise à l’échelle et traitement parallèle.
  • Demandes GetRecords insuffisantes : Si le client n'envoie pas les requêtes GetRecords assez fréquemment, l'application client peut prendre du retard. Vérifiez les configurations de KCL withMaxRecords et withIdleTimeBetweenReadsInMillis.
  • Débit insuffisant ou paramètre MillisBehindLatest élevé : Si vous utilisez Amazon Managed Service pour Apache Flink pour SQL, consultez la section Débit insuffisant ou paramètre MillisBehindLatest élevé ou Retard de traitement des enregistrements de consommateurs.

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 rétention est de 24 heures et vous pouvez la configurer pour une durée maximale d'un an. 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.

Limitation des lectures

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

Un consommateur qui dépasse le quota de cinq appels GetRecords par seconde peut provoquer des limitations de lecture. Pour plus d'informations sur les limitations de lecture sur les flux Kinesis, consultez la section Comment détecter et résoudre les exceptions ReadProvisionedThroughputExceeded dans Kinesis Data Streams ?

Erreur de la fonction Lambda

Dans CloudWatch, examinez les fonctions Lambda du flux pour lequel le nombre IteratorAgeMilliseconds continue d'augmenter. Pour identifier les erreurs qui entraînent une augmentation de la valeur IteratorAgeMilliseconds, consultez le résumé des erreurs dans CloudWatch. Les configurations du déclencheur Lambda, des appels bloqués ou de l’allocation de mémoire Lambda peuvent entraîner un ralentissement de la fonction Lambda. 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 dans l'horodatage confirme la cause de l'augmentation. Pour plus d'informations, consultez la section Configuration des options de la fonction Lambda.

Remarque : Une fonction Lambda peut générer une erreur lorsqu'elle est réessayée. La fonction Lambda est réessayée car elle n'ignore pas les enregistrements en tant qu'utilisateur de Kinesis. À mesure que ces enregistrements sont réessayés, les délais de traitement augmentent également. Votre consommateur prend alors du retard et entraîne une augmentation de la métrique IteratorAgeMilliseconds.

Délai d’expiration de la connexion intermittente

Votre application client peut rencontrer un problème de délai d’expiration de connexion lorsqu'elle extrait des enregistrements du flux de données Kinesis. Les erreurs de délai d’expiration de connexion intermittente peuvent entraîner une augmentation significative du nombre IteratorAgeMilliseconds.

Pour vérifier si l'augmentation est liée à un délai d’expiration de la connexion, vérifiez les métriques GetRecords.Latency et GetRecords.Success. Si les deux métriques sont également affectées, votre nombre IteratorAgeMilliseconds n'augmente pas une fois la connexion rétablie.

Distribution inégale des données entre les partitions

Certaines partitions de votre flux de données Kinesis peuvent recevoir plus d'enregistrements que d'autres. Cela est dû au fait que la clé de partition utilisée dans les opérations PUT ne répartit pas les données de manière égale entre les partitions. Cette distribution inégale des données entraîne une diminution du nombre d'appels GetRecords parallèles aux fragments du flux de données Kinesis et entraîne une augmentation du nombre IteratorAgeMilliseconds.

Vous pouvez utiliser des clés de partition aléatoires pour répartir les données de manière uniforme sur les partitions du flux. Les clés de partition aléatoires peuvent aider l'application client à lire les enregistrements plus rapidement.

Informations connexes

Mappages des sources d'événements Lambda

Résolution des problèmes rencontrés par les utilisateurs de Kinesis Data Streams

Utilisation d'AWS Lambda avec Amazon Kinesis

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a 2 ans