Mon application Amazon Kinesis Client Library (KCL) est bloquée et ne peut traiter aucun enregistrement Amazon Kinesis Data Streams.
Brève description
L'application KCL peut rester figée ou bloquée pour les raisons suivantes :
- Le processeur d’enregistrement (une méthode mise en œuvre par l'utilisateur) effectue une opération de blocage ou prend plus de temps que d’habitude.
- Aucun enregistrement de données n’est placé dans la partition.
- Le KCL reste figé lors de l'extraction d'un enregistrement.
- Le KCL ne peut pas planifier le traitement ou ne parvient pas à effectuer le point de contrôle.
Pour détecter et résoudre les problèmes liés à la KCL, effectuez les tâches suivantes :
- Analysez les métriques KCL.
- Analysez la table Amazon DynamoDB pour l’application KCL.
- Vérifiez les configurations KCL.
- Activez les journaux d’avertissement KCL.
- Activez les journaux de débogage KCL.
Résolution
Analyser les métriques KCL
Surveillez la métrique RecordProcessor.ProcessRecords.Time. Vérifiez que le temps nécessaire à la méthode ProcessRecords du processeur d’enregistrement est inférieur à 60 secondes. Si votre méthode ProcessRecords est bloquée, le KCL doit attendre. Une fois que votre processeur d’enregistrement a terminé sa tâche, optimisez votre méthode ProcessRecords.
Analyser la table DynamoDB pour l’application KCL
Chaque application KCL crée une table DynamoDB portant le même nom que l’application KCL pour suivre l'état de l’application. Pour résoudre les problèmes liés à l’application KCL, analysez les colonnes du tableau DynamoDB.
Si la colonne des points de contrôle du tableau n’est pas mise à jour, la logique de la méthode ProcessRecords est bloquée. Si les colonnes Checkpoint et LeaseCounter ne sont pas mises à jour, le paramètre MaxLeasePerWorker=1 empêche les autres travailleurs de souscrire le contrat de location. Pour débloquer la méthode ProcessRecords, augmentez la valeur du paramètre.
Vérifiez les configurations KCL
Vérifiez le nombre de flottes KCL. Notez le nombre de partitions dans le flux de données Kinesis. Si le nombre de partitions augmente, augmentez le paramètre MaxLeasesperWorker en fonction du nombre de partitions dans la KCL.
Activer les journaux d’avertissement KCL avancés
Pour vérifier que le processeur d'enregistrement est bloqué, définissez la valeur LogWarningForTaskAfterMillis pour la configuration KCL sur millisecondes. Le KCL attend ensuite la fin du traitement d’un enregistrement avant d’émettre un message d'avertissement dans le journal concernant le temps de traitement. Si des messages d’avertissement sont enregistrés, capturez des vidages de pile successifs de la JVM pour découvrir ce qui est bloqué. Vous pouvez utiliser la commande jstack pour capturer n'importe quelle trace de pile. Pour plus d’informations sur la valeur LogWarningForTaskAfterMillis, consultez LifecycleConfig.java sur le site web GitHub.
Activer les journaux de débogage KCL
Vous pouvez activer les journaux de débogage du KCL pour identifier les problèmes qui ont empêché le KCL de consommer des données à partir des flux de données Kinesis. Il est également recommandé de redémarrer l’application KCL pour résoudre tout autre problème lié à l'application.
Si vous avez redémarré le KCL et que celui-ci est toujours figé, il se peut qu’un problème soit dû au transfert de propriété da la partition. Les problèmes liés au transfert de la propriété d’une partition peuvent également entraîner des problèmes lorsque le KCL ne dispose pas des journaux pour les données que vous essayez de reproduire. Pour résoudre ce problème, activez la fonctionnalité de journalisation sur la flotte KCL.
Pour activer les journaux, procédez comme suit :
-
Choisissez un enregistreur.
-
Créez un fichier log4.properties dans le dossier src/main/resources pour rediriger les messages du journal vers la console :
log4j.appender.stdout=org.apache.log4j.ConsoleAppenderlog4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
log4j.logger.httpclient.wire=DEBUG
Remarque : dans cet exemple, log4j est utilisé pour déboguer les journaux en Java.
-
Redirigez les messages du journal vers un fichier journal :
log4j.appender.file=org.apache.log4j.RollingFileAppenderlog4j.appender.file.File=/Users/harshdev/Desktop/logfolder/ <== Give the log location where you want to create log files
log4j.appender.file.MaxFileSize=5MB
log4j.appender.file.MaxBackupIndex=10
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
log4j.rootLogger=DEBUG, stdout, file
-
Incluez la dépendance log4j dans votre fichier POM :
<dependency> <groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
Informations connexes
Surveillance de la bibliothèque cliente Kinesis avec Amazon CloudWatch
Repartage, mise à l'échelle et traitement parallèle