View a markdown version of this page

Migrieren Sie von KCL 2.x zu KCL 3.x - Amazon Kinesis Data Streams

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Migrieren Sie von KCL 2.x zu KCL 3.x

Dieses Thema enthält schrittweise Anweisungen zur Migration Ihres Consumer von KCL 2.x zu KCL 3.x. Wir empfehlen, auf KCL 3.5 oder höher zu migrieren, um das Einzeltabellenformat zu verwenden. KCL 3.x unterstützt die direkte Migration von KCL 2.x-Verbrauchern. Sie können die Daten aus Ihrem Kinesis-Datenstrom weiterhin nutzen und gleichzeitig Ihre Mitarbeiter fortlaufend migrieren.

Wichtig

KCL 3.x verwendet dieselben Schnittstellen und Methoden wie KCL 2.x. Daher müssen Sie Ihren Datensatzverarbeitungscode während der Migration nicht aktualisieren. Sie müssen jedoch die richtige Konfiguration vornehmen und die erforderlichen Schritte für die Migration überprüfen. Wir empfehlen Ihnen dringend, die folgenden Migrationsschritte zu befolgen, um eine reibungslose Migration zu gewährleisten.

Wichtig

Für neue Migrationen von KCL 2.x zu KCL 3.5 oder höher wird standardmäßig das Einzeltabellenformat verwendet. Ihre Anwendung verwendet nur die Leasing-Tabelle für alle Metadaten, sodass keine separaten Worker-Metriken und Koordinator-Statustabellen erforderlich sind. Weitere Informationen finden Sie unter Einzeltabellenformat für KCL.

Schritt 1: Voraussetzungen

Bevor Sie mit der Verwendung von KCL 3.x beginnen, stellen Sie sicher, dass Sie über Folgendes verfügen:

  • Java Development Kit (JDK) 8 oder höher

  • AWS SDK für Java 2.x

  • Maven oder Gradle für das Abhängigkeitsmanagement

Wichtig

Verwenden Sie nicht die AWS SDK für Java Versionen 2.27.19 bis 2.27.23 mit KCL 3.x. Diese Versionen enthalten ein Problem, das einen Ausnahmefehler im Zusammenhang mit der DynamoDB-Nutzung von KCL verursacht. Wir empfehlen, die AWS SDK für Java Version 2.28.0 oder höher zu verwenden, um dieses Problem zu vermeiden.

Schritt 2: Abhängigkeiten hinzufügen

Wenn Sie Maven verwenden, fügen Sie Ihrer pom.xml Datei die folgende Abhängigkeit hinzu. Stellen Sie sicher, dass Sie 3.x.x durch die neueste KCL-Version ersetzt haben.

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

Wenn Sie Gradle verwenden, fügen Sie Ihrer Datei Folgendes hinzu. build.gradle Stellen Sie sicher, dass Sie 3.x.x durch die neueste KCL-Version ersetzt haben.

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

Sie können im Maven Central Repository nach der neuesten Version der KCL suchen. https://search.maven.org/artifact/software.amazon.kinesis/amazon-kinesis-client

Schritt 3: Richten Sie die migrationsbezogene Konfiguration ein

Um von KCL 2.x zu KCL 3.x zu migrieren, müssen Sie den folgenden Konfigurationsparameter festlegen:

  • CoordinatorConfig.clientVersionConfig: Diese Konfiguration bestimmt, in welchem KCL-Versionskompatibilitätsmodus die Anwendung ausgeführt wird. Bei der Migration von KCL 2.x auf 3.x erfolgt die Migration phasenweise. Stellen Sie diese Konfiguration zunächst auf ein und stellen Sie sie allen CLIENT_VERSION_CONFIG_COMPATIBLE_WITH_2X_PHASE1 Workern zur Verfügung. Fügen Sie beim Erstellen Ihres Scheduler-Objekts die folgende Zeile hinzu:

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

In dieser Phase bleibt Ihre Anwendung mit KCL 2.x kompatibel und die Migration beginnt nicht, sodass Sie die KCL 3.x-Bibliothek sicher in Ihrer gesamten Flotte bereitstellen können.

Nachdem alle Worker damit arbeitenCLIENT_VERSION_CONFIG_COMPATIBLE_WITH_2X_PHASE1, stellen Sie diese Konfiguration auf ein, um die Migration CLIENT_VERSION_CONFIG_COMPATIBLE_WITH_2X zu starten. Um diese Konfiguration festzulegen, fügen Sie beim Erstellen Ihres Scheduler-Objekts die folgende Zeile hinzu:

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

Im Folgenden finden Sie ein Beispiel dafür, wie Sie die CoordinatorConfig.clientVersionConfig für die Migration von KCL 2.x nach 3.x einrichten. Sie können andere Konfigurationen je nach Bedarf an Ihre spezifischen Anforderungen anpassen:

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() );

Es ist wichtig, dass alle Worker in Ihrer Consumer-Anwendung zu einem bestimmten Zeitpunkt denselben Load Balancing-Algorithmus verwenden, da KCL 2.x und 3.x unterschiedliche Load-Balancing-Algorithmen verwenden. Wenn Workers mit unterschiedlichen Load-Balancing-Algorithmen betrieben werden, kann dies zu einer suboptimalen Lastverteilung führen, da die beiden Algorithmen unabhängig voneinander arbeiten.

Diese KCL 2.x-Kompatibilitätseinstellung ermöglicht es Ihrer KCL 3.x-Anwendung, in einem mit KCL 2.x kompatiblen Modus zu laufen und den Load Balancing-Algorithmus für KCL 2.x zu verwenden, bis alle Worker in Ihrer Consumer-Anwendung auf KCL 3.x aktualisiert wurden. Wenn die Migration abgeschlossen ist, wechselt KCL automatisch in den vollen KCL 3.x-Funktionsmodus und beginnt, einen neuen KCL 3.x-Load-Balancing-Algorithmus für alle laufenden Worker zu verwenden.

Wichtig

Wenn Sie zum Festlegen von Konfigurationen kein Objekt verwenden, ConfigsBuilder sondern ein LeaseManagementConfig Objekt erstellen, müssen Sie einen weiteren Parameter hinzufügen, der applicationName in KCL Version 3.x oder höher aufgerufen wird. Einzelheiten finden Sie unter Kompilierungsfehler mit dem LeaseManagementConfig Konstruktor. Wir empfehlen die Verwendung ConfigsBuilder zum Einstellen von KCL-Konfigurationen. ConfigsBuilderbietet eine flexiblere und wartbarere Möglichkeit, Ihre KCL-Anwendung zu konfigurieren.

Anmerkung

Die neuesten migrationsbezogenen Konfigurationsänderungen für KCL 3.5 finden Sie unter KCL 3.5-Konfigurationsupdates. https://github.com/awslabs/amazon-kinesis-client/blob/master/amazon-kinesis-client/src/main/java/software/amazon/kinesis/coordinator/CoordinatorConfig.java

Schritt 4: Folgen Sie den bewährten Methoden für die Implementierung der shutdownRequested () -Methode

KCL 3.x führt eine Funktion namens Graceful Lease Handoff ein, um die erneute Verarbeitung von Daten zu minimieren, wenn ein Mietvertrag im Rahmen der Neuzuweisung eines Mietvertrags an einen anderen Mitarbeiter übergeben wird. Dies wird erreicht, indem die zuletzt verarbeitete Sequenznummer in der Leasing-Tabelle vor der Leasingübergabe überprüft wird. Um sicherzustellen, dass das Graceful Lease Handoff ordnungsgemäß funktioniert, müssen Sie sicherstellen, dass Sie das checkpointer Objekt innerhalb der shutdownRequested Methode in Ihrer Klasse aufrufen. RecordProcessor Wenn Sie das checkpointer Objekt nicht innerhalb der shutdownRequested Methode aufrufen, können Sie es wie im folgenden Beispiel veranschaulicht implementieren.

Wichtig
  • Das folgende Implementierungsbeispiel ist eine Mindestanforderung für die reibungslose Leasingübergabe. Sie können es bei Bedarf um zusätzliche Logik im Zusammenhang mit dem Checkpointing erweitern. Wenn Sie eine asynchrone Verarbeitung durchführen, stellen Sie sicher, dass alle an den Downstream gelieferten Datensätze verarbeitet wurden, bevor Sie das Checkpointing aufrufen.

  • Eine ordnungsgemäße Leasingübergabe reduziert zwar die Wahrscheinlichkeit einer erneuten Verarbeitung von Daten bei Leasingübertragungen erheblich, schließt diese Möglichkeit jedoch nicht vollständig aus. Um die Datenintegrität und Konsistenz zu wahren, sollten Sie Ihre nachgelagerten Verbraucheranwendungen so gestalten, dass sie idempotent sind. Das bedeutet, dass sie in der Lage sein sollten, potenzielle doppelte Datensätze zu verarbeiten, ohne dass dies negative Auswirkungen auf das Gesamtsystem hat.

/** * 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); } }

Schritt 5: Prüfen Sie die KCL 3.x-Voraussetzungen für die Erfassung von Personalkennzahlen

KCL 3.x erfasst Kennzahlen zur CPU-Auslastung, wie z. B. die CPU-Auslastung der Mitarbeiter, um die Auslastung der Mitarbeiter gleichmäßig zu verteilen. Consumer-Anwendungen können Worker auf Amazon EC2, Amazon ECS, Amazon EKS oder ausführen. AWS Fargate KCL 3.x kann CPU-Auslastungsmetriken von Workern nur dann erfassen, wenn die folgenden Voraussetzungen erfüllt sind:

Amazon Elastic Compute Cloud(Amazon EC2)

  • Ihr Betriebssystem muss Linux OS sein.

  • Sie müssen IMDSv2 in Ihrer EC2-Instance aktivieren.

Amazon Elastic Container Service (Amazon ECS) auf Amazon EC2

Amazon ECS aktiviert AWS Fargate

  • Sie müssen Version 4 des Fargate-Endpunkts für Aufgabenmetadaten aktivieren. Wenn Sie die Fargate-Plattformversion 1.4.0 oder höher verwenden, ist dies standardmäßig aktiviert.

  • Fargate-Plattformversion 1.4.0 oder höher.

Amazon Elastic Kubernetes Service (Amazon EKS) auf Amazon EC2

  • Ihr Betriebssystem muss Linux OS sein.

Amazon EKS an AWS Fargate

  • Fargate-Plattform 1.3.0 oder höher.

Wichtig

Wenn KCL 3.x die CPU-Auslastungsmetriken von Workern nicht erfassen kann, weil die Voraussetzungen nicht erfüllt sind, wird die Last auf die Durchsatzstufe pro Lease neu verteilt. Dieser Fallback-Mechanismus zur Neuverteilung stellt sicher, dass alle Mitarbeiter aus den Leasingverträgen, die jedem Mitarbeiter zugewiesen wurden, einen ähnlichen Gesamtdurchsatz erhalten. Weitere Informationen finden Sie unter Wie KCL den Arbeitern Leasingverträge zuweist und die Last ausgleicht.

Schritt 6: Aktualisieren Sie die IAM-Berechtigungen für KCL 3.x

Sie müssen der IAM-Rolle oder -Richtlinie, die Ihrer KCL 3.x-Verbraucheranwendung zugeordnet ist, die folgenden Berechtigungen hinzufügen. Dazu gehört die Aktualisierung der vorhandenen IAM-Richtlinie, die von der KCL-Anwendung verwendet wird. Weitere Informationen finden Sie unter Für KCL-Verbraucheranwendungen sind IAM-Berechtigungen erforderlich.

Wichtig

In Ihren vorhandenen KCL-Anwendungen wurden der IAM-Richtlinie möglicherweise die folgenden IAM-Aktionen und Ressourcen nicht hinzugefügt, da sie in KCL 2.x nicht benötigt wurden. Stellen Sie sicher, dass Sie sie hinzugefügt haben, bevor Sie Ihre KCL 3.x-Anwendung ausführen:

  • Aktionen: UpdateTable

    • Ressourcen (ARNs): arn:aws:dynamodb:region:account:table/KCLApplicationName

  • Aktionen: Query

    • Ressourcen (ARNs): arn:aws:dynamodb:region:account:table/KCLApplicationName/index/*

  • Aktionen:CreateTable,DescribeTable,Scan,GetItem,PutItem, UpdateItem DeleteItem

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

    Ersetzen Sie „Region“, „Konto“ und "KCLApplicationName" in den ARNs durch Ihre eigene AWS-Konto Nummer AWS-Region bzw. Ihren KCL-Anwendungsnamen. Wenn Sie Konfigurationen verwenden, um die Namen der von KCL erstellten Metadatentabellen anzupassen, verwenden Sie diese angegebenen Tabellennamen anstelle des KCL-Anwendungsnamens.

Schritt 7: Stellen Sie Ihren Mitarbeitern den KCL 3.x-Code zur Verfügung

Nachdem Sie die für die Migration erforderliche Konfiguration festgelegt und alle vorherigen Migrationschecklisten abgeschlossen haben, können Sie Ihren Code erstellen und für Ihre Mitarbeiter bereitstellen.

Anmerkung

Wenn Sie einen Kompilierungsfehler mit dem LeaseManagementConfig Konstruktor sehen, finden Sie Informationen zur Problembehandlung unter Kompilierungsfehler mit dem LeaseManagementConfig Konstruktor.

Schritt 8: Schließen Sie die Migration ab

Während der Bereitstellung von KCL 3.x-Code verwendet KCL weiterhin den Lease-Zuweisungsalgorithmus von KCL 2.x. Wenn Sie den KCL 3.x-Code erfolgreich für alle Ihre Mitarbeiter bereitgestellt haben, erkennt KCL dies automatisch und wechselt auf den neuen Algorithmus für die Leasingzuweisung, der auf der Ressourcenauslastung der Mitarbeiter basiert. Weitere Informationen zum neuen Algorithmus für die Vertragszuweisung finden Sie unter. Wie KCL den Arbeitern Leasingverträge zuweist und die Last ausgleicht

Während der Bereitstellung können Sie den Migrationsprozess anhand der folgenden Metriken überwachen, die an gesendet CloudWatch werden. Sie können die Metriken im Rahmen des Migration Vorgangs überwachen. Alle Metriken sind pro KCL-application SUMMARY Metrik und auf Metrikebene festgelegt. Wenn die Sum Statistik der CurrentState:3xWorker Metrik mit der Gesamtzahl der Worker in Ihrer KCL-Anwendung übereinstimmt, bedeutet dies, dass die Migration zu KCL 3.x erfolgreich abgeschlossen wurde.

Wichtig

Es dauert mindestens 10 Minuten, bis KCL auf den neuen Algorithmus für die Zuweisung von Leasingnehmern umgestellt hat, nachdem alle Mitarbeiter bereit sind, ihn auszuführen.

CloudWatch Metriken für den KCL-Migrationsprozess
Kennzahlen Description
CurrentState:3xWorker

Die Anzahl der KCL-Worker, die erfolgreich zu KCL 3.x migriert wurden und den neuen Algorithmus für die Leasingzuweisung ausführen. Wenn die Sum Anzahl dieser Metrik mit der Gesamtzahl Ihrer Mitarbeiter übereinstimmt, bedeutet dies, dass die Migration zu KCL 3.x erfolgreich abgeschlossen wurde.

  • Metrikstufe: Summary

  • Einheiten: Anzahl

  • Statistik: Die nützlichste Statistik ist Sum

CurrentState:2xCompatibleWorker

Die Anzahl der KCL-Worker, die während des Migrationsprozesses im KCL 2.x-kompatiblen Modus ausgeführt wurden. Ein Wert ungleich Null für diese Metrik gibt an, dass die Migration noch im Gange ist.

  • Metrikstufe: Summary

  • Einheiten: Anzahl

  • Statistik: Die nützlichste Statistik ist Sum

Fault

Die Anzahl der während des Migrationsprozesses aufgetretenen Ausnahmen. Bei den meisten dieser Ausnahmen handelt es sich um vorübergehende Fehler, und KCL 3.x versucht automatisch erneut, die Migration abzuschließen. Wenn Sie einen dauerhaften Fault Metrikwert beobachten, überprüfen Sie Ihre Protokolle aus dem Migrationszeitraum, um weitere Problemlösungen zu finden. Wenn das Problem weiterhin besteht, wenden Sie sich an Support.

  • Metrikstufe: Summary

  • Einheiten: Anzahl

  • Statistik: Die nützlichste Statistik ist Sum

GsiStatusReady

Der Status der Erstellung des globalen Sekundärindex (GSI) in der Leasingtabelle. Diese Metrik gibt an, ob der GSI in der Leasing-Tabelle erstellt wurde. Dies ist eine Voraussetzung für die Ausführung von KCL 3.x. Der Wert ist 0 oder 1, wobei 1 für eine erfolgreiche Erstellung steht. Während eines Rollback-Status wird diese Metrik nicht ausgegeben. Nachdem Sie den Rollforward erneut ausgeführt haben, können Sie die Überwachung dieser Metrik fortsetzen.

  • Metrikstufe: Summary

  • Einheiten: Anzahl

  • Statistik: Die nützlichste Statistik ist Sum

workerMetricsReady

Status der Arbeitnehmer: Kennzahlen, Emissionen aller Arbeitnehmer. Die Metriken geben an, ob alle Mitarbeiter Kennzahlen wie die CPU-Auslastung ausgeben. Der Wert ist 0 oder 1, wobei 1 bedeutet, dass alle Mitarbeiter erfolgreich Kennzahlen ausgeben und bereit sind, den neuen Leasingzuweisungsalgorithmus durchzuführen. Während eines Rollback-Status wird diese Metrik nicht ausgegeben. Nachdem Sie den Rollforward erneut ausgeführt haben, können Sie die Überwachung dieser Metrik fortsetzen.

  • Metrikstufe: Summary

  • Einheiten: Anzahl

  • Statistik: Die nützlichste Statistik ist Sum

KCL bietet während der Migration die Möglichkeit, in den 2.x-kompatiblen Modus zurückzukehren. Nach erfolgreicher Migration zu KCL 3.x empfehlen wir Ihnen, die CoordinatorConfig.clientVersionConfig Einstellung zu entfernen, CLIENT_VERSION_CONFIG_COMPATIBLE_WITH_2X falls ein Rollback nicht mehr erforderlich ist. Wenn Sie diese Konfiguration entfernen, werden keine migrationsbezogenen Metriken mehr aus der KCL-Anwendung ausgegeben.

Anmerkung

Wir empfehlen, dass Sie die Leistung und Stabilität Ihrer Anwendung während der Migration und nach Abschluss der Migration für einen bestimmten Zeitraum überwachen. Wenn Sie Probleme feststellen, können Sie Workers mithilfe des KCL-Migrationstools rückgängig machen, um die mit KCL 2.x kompatiblen Funktionen zu verwenden. https://github.com/awslabs/amazon-kinesis-client/blob/master/amazon-kinesis-client/scripts/KclMigrationTool.py