Direkte Versionsupgrades für Apache Flink - Managed Service für Apache Flink

Amazon Managed Service für Apache Flink war zuvor als Amazon Kinesis Data Analytics für Apache Flink bekannt.

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.

Direkte Versionsupgrades für Apache Flink

Mit direkten Versionsupgrades für Apache Flink behalten Sie die Rückverfolgbarkeit von Anwendungen anhand eines einzigen ARN für alle Apache Flink-Versionen aufrecht. Dazu gehören Snapshots, Protokolle, Metriken, Tags, Flink-Konfigurationen, Erhöhungen von Ressourcenlimits, VPCs und mehr. Sie können direkte Versions-Upgrades für Apache Flink durchführen, um bestehende Anwendungen auf eine neue Flink-Version in Amazon Managed Service for Apache Flink zu aktualisieren. Um diese Aufgabe auszuführen, können Sie das AWS CLI AWS CloudFormation, AWS SDK oder das verwenden. AWS Management Console

Anmerkung

Sie können keine direkten Versionsupgrades für Apache Flink mit Amazon Managed Service für Apache Flink Studio verwenden.

Aktualisieren von Anwendungen mithilfe von direkten Versionsupgrades für Apache Flink

Bevor Sie beginnen, empfehlen wir Ihnen, sich dieses Video anzusehen: Direkte Versionsupgrades.

Um direkte Versionsupgrades für Apache Flink durchzuführen, können Sie das AWS CLI, AWS CloudFormation, AWS SDK oder das verwenden. AWS Management Console Sie können diese Funktion mit allen vorhandenen Anwendungen verwenden, die Sie mit Managed Service for Apache Flink im Status oder verwenden. READY RUNNING Es verwendet die UpdateApplication API, um die Möglichkeit hinzuzufügen, die Flink-Laufzeit zu ändern.

Vor dem Upgrade: Aktualisierung Ihrer Apache Flink-Anwendung

Wenn Sie Ihre Flink-Anwendungen schreiben, bündeln Sie sie mit ihren Abhängigkeiten in einer Anwendungs-JAR und laden die JAR in Ihren Amazon S3 S3-Bucket hoch. Von dort aus führt Amazon Managed Service für Apache Flink den Job in der neuen Flink-Laufzeit aus, die Sie ausgewählt haben. Möglicherweise müssen Sie Ihre Anwendungen aktualisieren, um die Kompatibilität mit der Flink-Laufzeit zu erreichen, auf die Sie ein Upgrade durchführen möchten. Es kann Inkonsistenzen zwischen den Flink-Versionen geben, die dazu führen, dass das Versionsupgrade fehlschlägt. Am häufigsten wird dies mit Konnektoren für Quellen (Ingress) oder Destinationen (Sinks, Egress) und Scala-Abhängigkeiten geschehen. Flink 1.15 und spätere Versionen in Managed Service for Apache Flink sind Scala-unabhängig, und Ihr JAR muss die Version von Scala enthalten, die Sie verwenden möchten.

Um Ihre Anwendung zu aktualisieren

  1. Lesen Sie die Ratschläge der Flink-Community zur Aktualisierung von Anwendungen mit State. Siehe Aktualisieren von Anwendungen und Flink-Versionen.

  2. Lesen Sie die Liste der bekannten Probleme und Einschränkungen. Siehe Vorsichtsmaßnahmen und bekannte Probleme.

  3. Aktualisieren Sie Ihre Abhängigkeiten und testen Sie Ihre Anwendungen lokal. Diese Abhängigkeiten sind in der Regel:

    1. Die Flink-Laufzeit und die API.

    2. Für die neue Flink-Laufzeit werden Konnektoren empfohlen. Sie finden diese unter Release-Versionen für die spezifische Laufzeit, auf die Sie aktualisieren möchten.

    3. Scala — Apache Flink ist ab und einschließlich Flink 1.15 Scala-agnostisch. Sie müssen die Scala-Abhängigkeiten, die Sie verwenden möchten, in Ihre Anwendungs-JAR aufnehmen.

  4. Erstellen Sie eine neue Anwendungs-JAR auf einer Zip-Datei und laden Sie sie auf Amazon S3 hoch. Wir empfehlen, dass Sie einen anderen Namen als die vorherige JAR-/Zip-Datei verwenden. Wenn Sie ein Rollback durchführen müssen, verwenden Sie diese Informationen.

  5. Wenn Sie statusbehaftete Anwendungen ausführen, empfehlen wir Ihnen dringend, einen Snapshot Ihrer aktuellen Anwendung zu erstellen. Auf diese Weise können Sie statusabhängig ein Rollback durchführen, falls während oder nach dem Upgrade Probleme auftreten.

Aktualisieren Sie Ihre Anwendung auf eine neue Apache Flink-Version

Sie können Ihre Flink-Anwendung aktualisieren, indem Sie die UpdateApplicationAktion verwenden.

Sie können die UpdateApplication API auf verschiedene Arten aufrufen:

  • Verwenden Sie den vorhandenen Konfigurationsworkflow auf dem AWS Management Console.

    • Gehen Sie zu Ihrer App-Seite auf der AWS Management Console.

    • Wählen Sie Konfigurieren aus.

    • Wählen Sie die neue Laufzeit und den Snapshot aus, von dem aus Sie beginnen möchten. Dies wird auch als Wiederherstellungskonfiguration bezeichnet. Verwenden Sie die neueste Einstellung als Wiederherstellungskonfiguration, um die App vom neuesten Snapshot aus zu starten. Zeigen Sie auf die neue aktualisierte Anwendung Jar/Zip auf Amazon S3.

  • Verwenden Sie die Aktion „Anwendung AWS CLI aktualisieren“.

  • Verwenden Sie AWS CloudFormation (CFN).

    • Aktualisieren Sie das RuntimeEnvironmentFeld. Zuvor wurde die Anwendung AWS CloudFormation gelöscht und eine neue erstellt, wodurch Ihre Schnappschüsse und andere App-Historien verloren gingen. AWS CloudFormation Aktualisiert jetzt Ihr RuntimeEnvironment vorhandenes Dokument und löscht Ihre Anwendung nicht.

  • Verwenden Sie das AWS SDK.

    • Die Programmiersprache Ihrer Wahl finden Sie in der SDK-Dokumentation. Siehe UpdateApplication.

Sie können das Upgrade durchführen, während sich die Anwendung im RUNNING Status befindet oder während die Anwendung im READY Status gestoppt ist. Amazon Managed Service für Apache Flink validiert, um die Kompatibilität zwischen der ursprünglichen Runtime-Version und der Ziel-Runtime-Version zu überprüfen. Diese Kompatibilitätsprüfung wird ausgeführt, wenn Sie diese durchführen, UpdateApplicationwährend Sie sich im RUNNING Status befinden, oder beim nächsten Mal, StartApplicationwenn Sie ein Upgrade durchführen, während Sie sich im READY Status befinden.

Das folgende Beispiel zeigt das Upgrade einer App im RUNNING Bundesstaat Flink 1.18 in US East (Nord-Virginia) mithilfe von AWS CLI und das Starten der aktualisierten App aus dem neuesten Snapshot. UpgradeTest

aws --region us-east-1 kinesisanalyticsv2 update-application \ --application-name UpgradeTest --runtime-environment-update "FLINK-1_18" \ --application-configuration-update '{"ApplicationCodeConfigurationUpdate": '\ '{"CodeContentUpdate": {"S3ContentLocationUpdate": '\ '{"FileKeyUpdate": "flink_1_18_app.jar"}}}}' \ --run-configuration-update '{"ApplicationRestoreConfiguration": '\ '{"ApplicationRestoreType": "RESTORE_FROM_LATEST_SNAPSHOT"}}' \ --current-application-version-id ${current_application_version}
  • Wenn Sie Service-Snapshots aktiviert haben und die Anwendung vom letzten Snapshot aus fortsetzen möchten, überprüft Amazon Managed Service für Apache Flink, ob die Laufzeit der aktuellen RUNNING Anwendung mit der ausgewählten Ziellaufzeit kompatibel ist.

  • Wenn Sie einen Snapshot angegeben haben, von dem aus die Ziellaufzeit fortgesetzt werden soll, überprüft Amazon Managed Service für Apache Flink, ob die Ziellaufzeit mit dem angegebenen Snapshot kompatibel ist. Schlägt die Kompatibilitätsprüfung fehl, wird Ihre Aktualisierungsanfrage abgelehnt und Ihre Anwendung bleibt unverändert. RUNNING

  • Wenn Sie Ihre Anwendung ohne Snapshot starten möchten, führt Amazon Managed Service für Apache Flink keine Kompatibilitätsprüfungen durch.

  • Wenn Ihre aktualisierte Anwendung fehlschlägt oder in einem transitiven UPDATING Zustand hängen bleibt, folgen Sie den Anweisungen im Rollback Abschnitt, um zum fehlerfreien Zustand zurückzukehren.

Prozessablauf für die Ausführung von Statusanwendungen

Das folgende Diagramm stellt den empfohlenen Arbeitsablauf für das Upgrade der Anwendung während der Ausführung dar. Wir gehen davon aus, dass die Anwendung statusbehaftet ist und dass Sie Snapshots aktiviert haben. Für diesen Workflow stellen Sie bei der Aktualisierung die Anwendung aus dem neuesten Snapshot wieder her, der vor der Aktualisierung automatisch von Amazon Managed Service für Apache Flink erstellt wurde.

Das folgende Beispiel zeigt das Upgrade einer App im READY Bundesstaat UpgradeTest Flink 1.18 in US East (Nord-Virginia) mithilfe von. AWS CLI Es gibt keinen angegebenen Snapshot zum Starten der App, da die Anwendung nicht ausgeführt wird. Sie können einen Snapshot angeben, wenn Sie die Anfrage zum Starten der Anwendung stellen.

aws --region us-east-1 kinesisanalyticsv2 update-application \ --application-name UpgradeTest --runtime-environment-update "FLINK-1_18" \ --application-configuration-update '{"ApplicationCodeConfigurationUpdate": '\ '{"CodeContentUpdate": {"S3ContentLocationUpdate": '\ '{"FileKeyUpdate": "flink_1_18_app.jar"}}}}' \ --current-application-version-id ${current_application_version}
  • Sie können die Laufzeit Ihrer Anwendungen im READY Status auf eine beliebige Flink-Version aktualisieren. Amazon Managed Service für Apache Flink führt keine Prüfungen durch, bis Sie Ihre Anwendung starten.

  • Amazon Managed Service für Apache Flink führt nur Kompatibilitätsprüfungen für den Snapshot durch, den Sie zum Starten der App ausgewählt haben. Dies sind grundlegende Kompatibilitätsprüfungen, die der Flink-Kompatibilitätstabelle folgen. Sie überprüfen nur die Flink-Version, mit der der Snapshot erstellt wurde, und die Flink-Version, auf die Sie abzielen. Wenn die Flink-Laufzeit des ausgewählten Snapshots nicht mit der neuen Laufzeit der App kompatibel ist, wird die Startanfrage möglicherweise abgelehnt.

Prozessablauf für Ready-State-Anwendungen

Das folgende Diagramm zeigt den empfohlenen Arbeitsablauf für das Upgrade der Anwendung im Bereitschaftszustand. Wir gehen davon aus, dass die Anwendung statusbehaftet ist und dass Sie Snapshots aktiviert haben. Für diesen Workflow stellen Sie bei der Aktualisierung die Anwendung aus dem letzten Snapshot wieder her, der automatisch von Amazon Managed Service für Apache Flink erstellt wurde, als die Anwendung gestoppt wurde.

Rollback

Wenn Sie Probleme mit Ihrer Anwendung haben oder Inkonsistenzen in Ihrem Anwendungscode zwischen den Flink-Versionen feststellen, können Sie mit dem, AWS CLI AWS CloudFormation, AWS SDK oder dem ein Rollback durchführen. AWS Management Console Die folgenden Beispiele zeigen, wie ein Rollback in verschiedenen Fehlerszenarien aussieht.

Das Runtime-Upgrade war erfolgreich, die Anwendung befindet sich im RUNNING Status, aber der Job schlägt fehl und wird ständig neu gestartet

Angenommen, Sie versuchen, eine statusbehaftete Anwendung mit TestApplication dem Namen Flink 1.15 auf Flink 1.18 in USA Ost (Nord-Virginia) zu aktualisieren. Die aktualisierte Flink 1.18-Anwendung kann jedoch nicht gestartet werden oder wird ständig neu gestartet, obwohl sich die Anwendung im Status befindet. RUNNING Dies ist ein häufiges Fehlerszenario. Um weitere Ausfallzeiten zu vermeiden, empfehlen wir, dass Sie Ihre Anwendung sofort auf die vorherige laufende Version (Flink 1.15) zurücksetzen und das Problem später diagnostizieren.

Verwenden Sie den AWS CLI Befehl rollback-application oder die API-Aktion, um die Anwendung auf die zuvor ausgeführte Version zurückzusetzen. RollbackApplication Diese API-Aktion macht die Änderungen rückgängig, die Sie vorgenommen haben und die zur neuesten Version geführt haben. Anschließend wird Ihre Anwendung mit dem letzten erfolgreichen Snapshot neu gestartet.

Wir empfehlen dringend, dass Sie einen Snapshot mit Ihrer vorhandenen App erstellen, bevor Sie versuchen, ein Upgrade durchzuführen. Dies trägt dazu bei, Datenverlust oder die Notwendigkeit einer erneuten Verarbeitung von Daten zu vermeiden.

In diesem Fehlerszenario AWS CloudFormation wird die Anwendung nicht für Sie zurückgesetzt. Sie müssen die CloudFormation Vorlage so aktualisieren, dass sie auf die vorherige Laufzeit und auf den vorherigen Code verweist, um die Aktualisierung der Anwendung CloudFormation zu erzwingen. Andernfalls CloudFormation wird davon ausgegangen, dass Ihre Anwendung aktualisiert wurde, wenn sie in den RUNNING Status wechselt.

Eine Anwendung, die feststeckt, wird rückgängig gemacht UPDATING

Wenn Ihre Anwendung nach einem Upgrade-Versuch im AUTOSCALING Status UPDATING oder hängen bleibt, bietet Amazon Managed Service für Apache Flink den AWS CLI Befehl rollback-applications oder die RollbackApplicationsAPI-Aktion, mit der die Anwendung auf die Version vor dem Status „blockiert“ oder „blockiert“ zurückgesetzt werden kann. UPDATING AUTOSCALING Diese API macht die Änderungen rückgängig, die Sie vorgenommen haben und die dazu geführt haben, dass die Anwendung in UPDATING einem transitiven Zustand hängengeblieben ist. AUTOSCALING

Allgemeine bewährte Verfahren und Empfehlungen

  • Testen Sie den neuen Job/die neue Laufzeit ohne Status in einer Produktionsumgebung, bevor Sie ein Produktionsupgrade versuchen.

  • Erwägen Sie, das statusbehaftete Upgrade zunächst mit einer Anwendung zu testen, die nicht zur Produktion gehört.

  • Stellen Sie sicher, dass Ihr neuer Job Graph einen kompatiblen Status mit dem Snapshot aufweist, den Sie zum Starten Ihrer aktualisierten Anwendung verwenden werden.

    • Stellen Sie sicher, dass die in den Operatorstatus gespeicherten Typen gleich bleiben. Wenn sich der Typ geändert hat, kann Apache Flink den Operatorstatus nicht wiederherstellen.

    • Stellen Sie sicher, dass die Operator-IDs, die Sie mit der uid Methode festgelegt haben, dieselben bleiben. Apache Flink empfiehlt ausdrücklich, Operatoren eindeutige IDs zuzuweisen. Weitere Informationen finden Sie unter Zuweisen von Operator-IDs in der Apache Flink-Dokumentation.

      Wenn Sie Ihren Operatoren keine IDs zuweisen, generiert Flink sie automatisch. In diesem Fall hängen sie möglicherweise von der Programmstruktur ab und können, wenn sie geändert werden, zu Kompatibilitätsproblemen führen. Flink verwendet Operator-IDs, um den Status im Snapshot dem Operator zuzuordnen. Das Ändern der Operator-IDs führt dazu, dass die Anwendung nicht gestartet wird oder der im Snapshot gespeicherte Status gelöscht wird und der neue Operator ohne Status startet.

    • Ändern Sie nicht den Schlüssel, der zum Speichern des eingegebenen Status verwendet wurde.

    • Ändern Sie nicht den Eingabetyp von statusbehafteten Operatoren wie Window oder Join. Dadurch wird implizit der Typ des internen Zustands des Operators geändert, was zu einer Zustandsinkompatibilität führt.

Vorsichtsmaßnahmen und bekannte Probleme

Konfigurationsänderungen von Flink 1.19 und höher sind nicht zulässig

  • Wenn Sie Ihre Runtime von Flink 1.18 oder früher auf Flink 1.19 oder höher aktualisieren, sind Änderungen der Flink-Job-Konfiguration mithilfe des Flink-Jobcodes nicht mehr zulässig. Das hat zur Folge, dass die Bewerbung den Job nicht einreichen kann. In einem Fehlerprotokoll wird angegeben, welche nicht zulässigen Konfigurationen zur Laufzeit geändert wurden. Weitere Informationen finden Sie unter FlinkRuntimeException: „Unzulässige Konfigurationsänderung (en) wurde (n) erkannt“.

Bekannte Einschränkungen der staatlichen Kompatibilität

  • Wenn Sie die Tabellen-API verwenden, garantiert Apache Flink keine Statuskompatibilität zwischen Flink-Versionen. Weitere Informationen finden Sie unter Stateful Upgrades and Evolution in der Apache Flink-Dokumentation.

  • Die Status von Flink 1.6 sind nicht mit Flink 1.18 kompatibel. Die API lehnt Ihre Anfrage ab, wenn Sie versuchen, ein Upgrade von 1.6 auf 1.18 und höher mit State durchzuführen. Sie können ein Upgrade auf 1.8, 1.11, 1.13 und 1.15 durchführen und einen Snapshot erstellen und dann auf 1.18 und höher aktualisieren. Weitere Informationen finden Sie unter Upgraden von Anwendungen und Flink-Versionen in der Apache Flink-Dokumentation.

Bekannte Probleme mit dem Flink Kinesis Connector

  • Wenn Sie Flink 1.11 oder früher verwenden und den amazon-kinesis-connector-flink Connector für E nhanced-fan-out (EFO) -Unterstützung verwenden, müssen Sie zusätzliche Schritte unternehmen, um ein Stateful-Upgrade auf Flink 1.13 oder höher durchzuführen. Dies liegt an der Änderung des Paketnamens des Connectors. Weitere Informationen finden Sie unter amazon-kinesis-connector-flink.

    Der amazon-kinesis-connector-flink Anschluss für Flink 1.11 und frühere Versionen verwendet die Verpackungsoftware.amazon.kinesis, wohingegen der Kinesis-Anschluss für Flink 1.13 und höher verwendet. org.apache.flink.streaming.connectors.kinesis Verwenden Sie dieses Tool, um Ihre Migration zu unterstützen: -state-migrator. amazon-kinesis-connector-flink

  • Wenn Sie Flink 1.13 oder früher mit Flink 1.15 oder höher verwenden FlinkKinesisProducer und ein Upgrade auf Flink 1.15 oder höher durchführen, müssen Sie für ein Stateful-Upgrade weiterhin Flink 1.15 oder höher verwenden, FlinkKinesisProducer anstatt das neuere. KinesisStreamsSink Wenn Sie jedoch bereits ein benutzerdefiniertes uid Set auf Ihrer Spüle haben, sollten Sie in der Lage sein, zu diesem zu wechseln, weil der Status nicht beibehalten wird. KinesisStreamsSink FlinkKinesisProducer Flink behandelt ihn als denselben Operator, da ein benutzerdefinierter Operator festgelegt uid ist.

In Scala geschriebene Flink-Anwendungen

  • Ab Flink 1.15 beinhaltet Apache Flink Scala nicht mehr in der Runtime. Sie müssen die Version von Scala, die Sie verwenden möchten, und andere Scala-Abhängigkeiten in Ihren Code JAR/ZIP aufnehmen, wenn Sie auf Flink 1.15 oder höher aktualisieren. Weitere Informationen finden Sie unter Amazon Managed Service für Apache Flink für die Version Apache Flink 1.15.2.

  • Wenn Ihre Anwendung Scala verwendet und Sie sie von Flink 1.11 oder früher (Scala 2.11) auf Flink 1.13 (Scala 2.12) aktualisieren, stellen Sie sicher, dass Ihr Code Scala 2.12 verwendet. Andernfalls kann Ihre Flink 1.13-Anwendung möglicherweise keine Scala 2.11-Klassen in der Flink 1.13-Laufzeit finden.

Dinge, die Sie beim Downgrade der Flink-Anwendung beachten sollten

  • Ein Downgrade von Flink-Anwendungen ist möglich, aber auf Fälle beschränkt, in denen die Anwendung zuvor mit der älteren Flink-Version ausgeführt wurde. Für ein Stateful-Upgrade benötigt Managed Service für Apache Flink die Verwendung eines Snapshots, der mit einer entsprechenden oder früheren Version für das Downgrade erstellt wurde

  • Wenn Sie Ihre Runtime von Flink 1.13 oder höher auf Flink 1.11 oder früher aktualisieren und Ihre App das HashMap State-Backend verwendet, schlägt Ihre Anwendung kontinuierlich fehl.