View a markdown version of this page

Migrer de KCL 2.x vers KCL 3.x - Amazon Kinesis Data Streams

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Migrer de KCL 2.x vers KCL 3.x

Cette rubrique fournit des instructions détaillées pour migrer votre client de KCL 2.x vers KCL 3.x. Nous vous recommandons de migrer vers KCL 3.5 ou une version ultérieure pour utiliser le format de tableau unique. KCL 3.x prend en charge la migration sur place des consommateurs KCL 2.x. Vous pouvez continuer à consommer les données de votre flux de données Kinesis tout en faisant migrer vos employés de manière continue.

Important

KCL 3.x conserve les mêmes interfaces et méthodes que KCL 2.x. Vous n'avez donc pas à mettre à jour votre code de traitement des enregistrements pendant la migration. Cependant, vous devez définir la configuration appropriée et vérifier les étapes requises pour la migration. Nous vous recommandons vivement de suivre les étapes de migration suivantes pour une expérience de migration fluide.

Important

Pour les nouvelles migrations de KCL 2.x vers KCL 3.5 ou version ultérieure, le format de tableau unique est utilisé par défaut. Votre application utilise uniquement la table des baux pour toutes les métadonnées, ce qui élimine la nécessité de disposer de métriques de personnel et de tables d'état des coordinateurs distinctes. Pour de plus amples informations, veuillez consulter Format de tableau unique pour KCL.

Étape 1 : Prérequis

Avant de commencer à utiliser KCL 3.x, assurez-vous que vous disposez des éléments suivants :

  • Kit de développement Java (JDK) 8 ou version ultérieure

  • AWS SDK pour Java 2. x

  • Maven ou Gradle pour la gestion des dépendances

Important

N'utilisez pas les AWS SDK pour Java versions 2.27.19 à 2.27.23 avec KCL 3.x. Ces versions incluent un problème qui provoque une erreur d'exception liée à l'utilisation de DynamoDB par KCL. Nous vous recommandons d'utiliser la AWS SDK pour Java version 2.28.0 ou ultérieure pour éviter ce problème.

Étape 2 : ajouter des dépendances

Si vous utilisez Maven, ajoutez la dépendance suivante à votre pom.xml fichier. Assurez-vous d'avoir remplacé 3.x.x par la dernière version de KCL.

<dependency> <groupId>software.amazon.kinesis</groupId> <artifactId>amazon-kinesis-client</artifactId> <version>3.x.x</version> <!-- Use the latest version --> </dependency>

Si vous utilisez Gradle, ajoutez ce qui suit à votre build.gradle fichier. Assurez-vous d'avoir remplacé 3.x.x par la dernière version de KCL.

implementation 'software.amazon.kinesis:amazon-kinesis-client:3.x.x'

Vous pouvez rechercher la dernière version de la KCL sur le référentiel central de Maven.

Étape 3 : Configuration de la configuration liée à la migration

Pour migrer de KCL 2.x vers KCL 3.x, vous devez définir le paramètre de configuration suivant :

  • CoordinatorConfig.clientVersionConfig: Cette configuration détermine le mode de compatibilité des versions de KCL dans lequel l'application s'exécutera. Lors de la migration de KCL 2.x vers 3.x, la migration s'effectue par phases. Tout d'abord, définissez cette configuration sur CLIENT_VERSION_CONFIG_COMPATIBLE_WITH_2X_PHASE1 et déployez-la pour tous les travailleurs. Ajoutez la ligne suivante lors de la création de votre objet de planification :

configsBuilder.coordinatorConfig().clientVersionConfig(ClientVersionConfig.CLIENT_VERSION_CONFIG_COMPATIBLE_WITH_2X_PHASE1)

Au cours de cette phase, votre application reste compatible avec KCL 2.x et la migration ne démarre pas, ce qui vous permet de déployer en toute sécurité la bibliothèque KCL 3.x sur l'ensemble de votre parc.

Une fois que tous les travailleurs ont exécutéCLIENT_VERSION_CONFIG_COMPATIBLE_WITH_2X_PHASE1, définissez cette configuration CLIENT_VERSION_CONFIG_COMPATIBLE_WITH_2X sur pour démarrer la migration. Pour définir cette configuration, ajoutez la ligne suivante lors de la création de votre objet de planification :

configsBuilder.coordinatorConfig().clientVersionConfig(ClientVersionConfig.CLIENT_VERSION_CONFIG_COMPATIBLE_WITH_2X)

L'exemple suivant montre comment configurer le paramètre CoordinatorConfig.clientVersionConfig pour la migration de KCL 2.x vers 3.x. Vous pouvez ajuster d'autres configurations selon vos besoins spécifiques :

Scheduler scheduler = new Scheduler( configsBuilder.checkpointConfig(), configsBuilder.coordinatorConfig().clientVersionConfig(ClientVersionConfig.CLIENT_VERSION_CONFIG_COMPATIBLE_WITH_2X), configsBuilder.leaseManagementConfig(), configsBuilder.lifecycleConfig(), configsBuilder.metricsConfig(), configsBuilder.processorConfig(), configsBuilder.retrievalConfig() );

Il est important que tous les travailleurs de votre application grand public utilisent le même algorithme d'équilibrage de charge à un moment donné, car KCL 2.x et 3.x utilisent des algorithmes d'équilibrage de charge différents. L'exécution de programmes de travail avec des algorithmes d'équilibrage de charge différents peut entraîner une distribution de charge sous-optimale car les deux algorithmes fonctionnent indépendamment.

Ce paramètre de compatibilité KCL 2.x permet à votre application KCL 3.x de s'exécuter dans un mode compatible avec KCL 2.x et d'utiliser l'algorithme d'équilibrage de charge pour KCL 2.x jusqu'à ce que tous les travailleurs de votre application grand public aient été mis à niveau vers KCL 3.x. Une fois la migration terminée, KCL passe automatiquement en mode de fonctionnalité KCL 3.x complet et commence à utiliser un nouvel algorithme d'équilibrage de charge KCL 3.x pour tous les travailleurs en cours d'exécution.

Important

Si vous n'utilisez pas ConfigsBuilder mais que vous créez un LeaseManagementConfig objet pour définir des configurations, vous devez ajouter un paramètre supplémentaire appelé applicationName dans KCL version 3.x ou ultérieure. Pour plus de détails, voir Erreur de compilation avec le LeaseManagementConfig constructeur. Nous vous recommandons de l'utiliser ConfigsBuilder pour définir les configurations KCL. ConfigsBuilderfournit un moyen plus flexible et plus facile à gérer de configurer votre application KCL.

Note

Pour les dernières modifications de configuration liées à la migration pour KCL 3.5, consultez la section Mises à jour de configuration de KCL 3.5.

Étape 4 : Suivez les meilleures pratiques pour la mise en œuvre de la méthode shutdownRequested ()

KCL 3.x introduit une fonctionnalité appelée transfert gracieux des contrats de location afin de minimiser le retraitement des données lorsqu'un contrat de location est transféré à un autre collaborateur dans le cadre du processus de réattribution du bail. Pour ce faire, cochez le dernier numéro de séquence traité dans la table des contrats de location avant le transfert du contrat de location. Pour garantir le bon fonctionnement de la transmission gracieuse du bail, vous devez vous assurer d'invoquer l'checkpointerobjet dans la shutdownRequested méthode de votre classe. RecordProcessor Si vous n'invoquez pas l'checkpointerobjet dans la shutdownRequested méthode, vous pouvez l'implémenter comme illustré dans l'exemple suivant.

Important
  • L'exemple de mise en œuvre suivant constitue une exigence minimale pour le transfert progressif du bail. Vous pouvez l'étendre pour inclure une logique supplémentaire liée au point de contrôle si nécessaire. Si vous effectuez un traitement asynchrone, assurez-vous que tous les enregistrements transmis à l'aval ont été traités avant d'invoquer le point de contrôle.

  • Bien que le transfert progressif des contrats de location réduise considérablement la probabilité de retraitement des données lors des transferts de bail, il n'élimine pas totalement cette possibilité. Pour préserver l'intégrité et la cohérence des données, concevez vos applications grand public en aval de manière à ce qu'elles soient idempotentes. Cela signifie qu'ils devraient être en mesure de gérer le traitement potentiel des doublons d'enregistrements sans affecter l'ensemble du système.

/** * Invoked when either Scheduler has been requested to gracefully shutdown * or lease ownership is being transferred gracefully so the current owner * gets one last chance to checkpoint. * * Checkpoints and logs the data a final time. * * @param shutdownRequestedInput Provides access to a checkpointer, allowing a record processor to checkpoint * before the shutdown is completed. */ public void shutdownRequested(ShutdownRequestedInput shutdownRequestedInput) { try { // Ensure that all delivered records are processed // and has been successfully flushed to the downstream before calling // checkpoint // If you are performing any asynchronous processing or flushing to // downstream, you must wait for its completion before invoking // the below checkpoint method. log.info("Scheduler is shutting down, checkpointing."); shutdownRequestedInput.checkpointer().checkpoint(); } catch (ShutdownException | InvalidStateException e) { log.error("Exception while checkpointing at requested shutdown. Giving up.", e); } }

Étape 5 : Vérifiez les prérequis de KCL 3.x pour la collecte des métriques des collaborateurs

KCL 3.x collecte des mesures d'utilisation du processeur, telles que l'utilisation du processeur par les travailleurs, afin d'équilibrer la charge entre les travailleurs de manière uniforme. Les utilisateurs d'applications grand public peuvent exécuter sur Amazon EC2, Amazon ECS, Amazon EKS ou AWS Fargate. KCL 3.x peut collecter des métriques d'utilisation du processeur auprès des travailleurs uniquement lorsque les conditions préalables suivantes sont remplies :

Amazon Elastic Compute Cloud(Amazon EC2)

  • Votre système d'exploitation doit être un système d'exploitation Linux.

  • Vous devez activer IMDSv2 dans votre instance EC2.

Amazon Elastic Container Service (Amazon ECS) sur Amazon EC2

  • Votre système d'exploitation doit être un système d'exploitation Linux.

  • Vous devez activer la version 4 du point de terminaison des métadonnées des tâches ECS.

  • La version de votre agent de conteneur Amazon ECS doit être 1.39.0 ou ultérieure.

Amazon ECS sur AWS Fargate

  • Vous devez activer la version 4 du point de terminaison des métadonnées des tâches Fargate. Si vous utilisez la version 1.4.0 ou ultérieure de la plateforme Fargate, cette option est activée par défaut.

  • Plateforme Fargate version 1.4.0 ou ultérieure.

Amazon Elastic Kubernetes Service (Amazon EKS) sur Amazon EC2

  • Votre système d'exploitation doit être un système d'exploitation Linux.

Amazon EKS sur AWS Fargate

  • Plateforme Fargate 1.3.0 ou version ultérieure.

Important

Si KCL 3.x ne peut pas collecter les métriques d'utilisation du processeur auprès des travailleurs parce que les prérequis ne sont pas remplis, il rééquilibrera la charge et le niveau de débit par bail. Ce mécanisme de rééquilibrage de repli garantira que tous les travailleurs obtiendront des niveaux de débit total similaires grâce aux contrats de location attribués à chaque travailleur. Pour de plus amples informations, veuillez consulter Comment KCL attribue des baux aux travailleurs et équilibre la charge.

Étape 6 : mettre à jour les autorisations IAM pour KCL 3.x

Vous devez ajouter les autorisations suivantes au rôle ou à la politique IAM associé à votre application grand public KCL 3.x. Cela implique de mettre à jour la politique IAM existante utilisée par l'application KCL. Pour de plus amples informations, veuillez consulter Autorisations IAM requises pour les applications grand public KCL.

Important

Vos applications KCL existantes n'ont peut-être pas les actions et ressources IAM suivantes ajoutées dans la politique IAM car elles n'étaient pas nécessaires dans KCL 2.x. Assurez-vous de les avoir ajoutés avant d'exécuter votre application KCL 3.x :

  • Mesures : UpdateTable

    • Ressources (ARN) : arn:aws:dynamodb:region:account:table/KCLApplicationName

  • Mesures : Query

    • Ressources (ARN) : arn:aws:dynamodb:region:account:table/KCLApplicationName/index/*

  • Actions : CreateTableDescribeTable, ScanGetItem,PutItem,UpdateItem, DeleteItem

    • Ressources (ARN) :arn:aws:dynamodb:region:account:table/KCLApplicationName-WorkerMetricStats, arn:aws:dynamodb:region:account:table/KCLApplicationName-CoordinatorState

    Remplacez « région », « compte » et « KCLApplicationName » dans les ARN par votre propre Région AWS Compte AWS numéro et le nom de l'application KCL respectivement. Si vous utilisez des configurations pour personnaliser les noms des tables de métadonnées créées par KCL, utilisez ces noms de table spécifiés au lieu du nom de l'application KCL.

Étape 7 : Déployez le code KCL 3.x auprès de vos collaborateurs

Après avoir défini la configuration requise pour la migration et terminé toutes les listes de contrôle de migration précédentes, vous pouvez créer et déployer votre code pour vos travailleurs.

Note

Si vous constatez une erreur de compilation avec le LeaseManagementConfig constructeur, consultez la section Erreur de compilation avec le LeaseManagementConfig constructeur pour obtenir des informations de dépannage.

Étape 8 : terminer la migration

Pendant le déploiement du code KCL 3.x, KCL continue d'utiliser l'algorithme d'attribution de bail de KCL 2.x. Une fois que vous avez déployé avec succès le code KCL 3.x auprès de tous vos employés, KCL le détecte automatiquement et passe au nouvel algorithme d'attribution des baux en fonction de l'utilisation des ressources des travailleurs. Pour plus de détails sur le nouvel algorithme d'attribution de bail, consultezComment KCL attribue des baux aux travailleurs et équilibre la charge.

Pendant le déploiement, vous pouvez surveiller le processus de migration à l'aide des métriques suivantes envoyées à CloudWatch. Vous pouvez surveiller les indicateurs relatifs à l'Migrationopération. Toutes les métriques sont par KCL-application métrique et définies au niveau SUMMARY métrique. Si la Sum statistique de la CurrentState:3xWorker métrique correspond au nombre total de travailleurs dans votre application KCL, cela indique que la migration vers KCL 3.x s'est terminée avec succès.

Important

Il faut au moins 10 minutes à KCL pour passer au nouvel algorithme d'attribution des locataires une fois que tous les employés sont prêts à l'exécuter.

CloudWatch mesures pour le processus de migration KCL
Métriques Description
CurrentState:3xWorker

Le nombre de travailleurs de KCL ont migré avec succès vers KCL 3.x et ont exécuté le nouvel algorithme d'attribution des baux. Si le Sum nombre de cette métrique correspond au nombre total de vos collaborateurs, cela indique que la migration vers KCL 3.x s'est terminée avec succès.

  • Niveau de métrique : Summary

  • Unités : nombre

  • Statistiques : La statistique la plus utile est Sum

CurrentState:2xCompatibleWorker

Le nombre de travailleurs KCL exécutés en mode compatible avec KCL 2.x pendant le processus de migration. Une valeur différente de zéro pour cette métrique indique que la migration est toujours en cours.

  • Niveau de métrique : Summary

  • Unités : nombre

  • Statistiques : La statistique la plus utile est Sum

Fault

Le nombre d'exceptions rencontrées au cours du processus de migration. La plupart de ces exceptions sont des erreurs transitoires, et KCL 3.x réessaiera automatiquement de terminer la migration. Si vous observez une valeur de Fault métrique persistante, consultez vos journaux datant de la période de migration pour plus de détails. Si le problème persiste, contactez Support.

  • Niveau de métrique : Summary

  • Unités : nombre

  • Statistiques : La statistique la plus utile est Sum

GsiStatusReady

État de la création de l'indice secondaire mondial (GSI) sur la table des contrats de location. Cette métrique indique si le GSI de la table des baux a été créé, une condition préalable à l'exécution de KCL 3.x. La valeur est 0 ou 1, 1 indiquant une création réussie. Lors d'un état d'annulation, cette métrique ne sera pas émise. Après avoir redémarré, vous pouvez reprendre le suivi de cette métrique.

  • Niveau de métrique : Summary

  • Unités : nombre

  • Statistiques : La statistique la plus utile est Sum

workerMetricsReady

Le statut des travailleurs mesure les émissions de tous les travailleurs. Les métriques indiquent si tous les travailleurs émettent des métriques telles que l'utilisation du processeur. La valeur est 0 ou 1, 1 indiquant que tous les travailleurs émettent avec succès des mesures et sont prêts à utiliser le nouvel algorithme d'attribution des baux. Lors d'un état d'annulation, cette métrique ne sera pas émise. Après avoir redémarré, vous pouvez reprendre le suivi de cette métrique.

  • Niveau de métrique : Summary

  • Unités : nombre

  • Statistiques : La statistique la plus utile est Sum

KCL fournit une capacité de restauration vers le mode compatible 2.x pendant la migration. Une fois la migration vers KCL 3.x réussie, nous vous recommandons de supprimer le CoordinatorConfig.clientVersionConfig paramètre « CLIENT_VERSION_CONFIG_COMPATIBLE_WITH_2X si la restauration n'est plus nécessaire ». La suppression de cette configuration arrête l'émission de métriques liées à la migration depuis l'application KCL.

Note

Nous vous recommandons de surveiller les performances et la stabilité de votre application pendant un certain temps pendant la migration et une fois celle-ci terminée. Si vous constatez le moindre problème, vous pouvez annuler les processus de travail pour qu'ils utilisent les fonctionnalités compatibles avec KCL 2.x à l'aide de l'outil de migration KCL.