Die Anwendung wird neu gestartet - 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.

Die Anwendung wird neu gestartet

Wenn Ihre Anwendung nicht fehlerfrei ist, schlägt ihr Apache-Flink-Auftrag ständig fehl und wird neu gestartet. In diesem Abschnitt werden Symptome und Schritte zur Behebung dieses Problems beschrieben.

Symptome

Dieses Problem kann folgende Symptome aufweisen:

  • Die FullRestarts-Metrik ist nicht Null. Diese Metrik gibt an, wie oft der Auftrag der Anwendung neu gestartet wurde, seit Sie die Anwendung gestartet haben.

  • Die Downtime-Metrik ist nicht Null. Diese Metrik stellt die Anzahl der Millisekunden dar, für die sich die Anwendung im Status FAILING oder RESTARTING befindet.

  • Das Anwendungsprotokoll enthält Statusänderungen zu RESTARTING oder FAILED. Mit der folgenden CloudWatch Logs Insights-Abfrage können Sie Ihr Anwendungsprotokoll nach diesen Statusänderungen abfragen:Fehler analysieren: Fehler im Zusammenhang mit Anwendungsaufgaben.

Ursachen und Lösungen

Die folgenden Bedingungen können dazu führen, dass Ihre Anwendung instabil wird und wiederholt neu gestartet wird:

  • Der Operator löst eine Ausnahme aus: Wenn eine Ausnahme in einem Operator in Ihrer Anwendung nicht behandelt wird, führt die Anwendung ein Failover durch (indem interpretiert wird, dass der Fehler nicht vom Operator behandelt werden kann). Die Anwendung wird vom letzten Checkpoint aus neu gestartet, um die Semantik der Exakt-einmal-Verarbeitung beizubehalten. Daher ist während dieser Neustartphasen Downtime nicht Null. Um dies zu verhindern, empfehlen wir Ihnen, alle wiederholbaren Ausnahmen im Anwendungscode zu behandeln.

    Sie können die Ursachen für dieses Problem untersuchen, indem Sie Ihre Anwendungsprotokolle nach Änderungen des Zustands Ihrer Anwendung von RUNNING auf FAILED abfragen. Weitere Informationen finden Sie unter Fehler analysieren: Fehler im Zusammenhang mit Anwendungsaufgaben.

  • Kinesis-Datenstreams werden nicht ordnungsgemäß bereitgestellt: Wenn eine Quelle oder Senke für Ihre Anwendung ein Kinesis-Datenstream ist, überprüfen Sie die Metriken für den Stream auf Fehler. ReadProvisionedThroughputExceeded WriteProvisionedThroughputExceeded

    Wenn Sie diese Fehler sehen, können Sie den verfügbaren Durchsatz für den Kinesis-Stream erhöhen, indem Sie die Anzahl der Shards des Streams erhöhen. Weitere Informationen finden Sie unter Wie kann ich die Anzahl der offenen Shards in Kinesis Data Streams ändern?

  • Andere Quellen oder Senken werden nicht ordnungsgemäß bereitgestellt oder sind nicht verfügbar: Stellen Sie sicher, dass Ihre Anwendung Quellen und Senken korrekt bereitstellt. Vergewissern Sie sich, dass alle in der Anwendung verwendeten Quellen oder Senken (z. B. andere AWS Dienste oder externe Quellen oder Ziele) ordnungsgemäß bereitgestellt sind, dass keine Lese- oder Schreibdrosselung auftritt oder dass sie regelmäßig nicht verfügbar sind.

    Wenn Sie Probleme mit dem Durchsatz Ihrer abhängigen Services haben, erhöhen Sie entweder die für diese Services verfügbaren Ressourcen oder untersuchen Sie die Ursache für Fehler oder Nichtverfügbarkeit.

  • Operatoren werden nicht ordnungsgemäß bereitgestellt: Wenn der Workload auf den Threads für einen der Operatoren in Ihrer Anwendung nicht richtig verteilt ist, kann der Operator überlastet werden und die Anwendung kann abstürzen. Informationen zur Optimierung der Operatorparallelität finden Sie unter Richtiges Verwalten der Operatorenskalierung.

  • Die Anwendung schlägt fehl mit DaemonException: Dieser Fehler wird in Ihrem Anwendungsprotokoll angezeigt, wenn Sie eine Version von Apache Flink vor 1.11 verwenden. Möglicherweise müssen Sie auf eine neuere Version von Apache Flink aktualisieren, damit eine KPL-Version von 0.14 oder höher verwendet wird.

  • Die Anwendung schlägt fehl mit TimeoutException FlinkException, oder RemoteTransportException: Diese Fehler können in Ihrem Anwendungsprotokoll erscheinen, wenn Ihre Task-Manager abstürzen. Wenn Ihre Anwendung überlastet ist, kann es bei Ihren Aufgabenmanagern zu einer Überlastung der CPU- oder Speicherressourcen kommen, wodurch sie ausfallen.

    Diese Fehler können wie folgt aussehen:

    • java.util.concurrent.TimeoutException: The heartbeat of JobManager with id xxx timed out

    • org.apache.flink.util.FlinkException: The assigned slot xxx was removed

    • org.apache.flink.runtime.io.network.netty.exception.RemoteTransportException: Connection unexpectedly closed by remote task manager

    Um dieses Problem zu beheben, überprüfen Sie Folgendes:

    • Überprüfen Sie Ihre CloudWatch Messwerte auf ungewöhnliche Spitzen bei der CPU- oder Speicherauslastung.

    • Überprüfen Sie Ihre Anwendung auf Durchsatzprobleme. Weitere Informationen finden Sie unter Beheben Sie Leistungsprobleme.

    • Untersuchen Sie Ihr Anwendungsprotokoll auf unbehandelte Ausnahmen, die Ihr Anwendungscode auslöst.

  • Die Anwendung schlägt mit dem Fehler JaxbAnnotationModule Not Found fehl: Dieser Fehler tritt auf, wenn Ihre Anwendung Apache Beam verwendet, aber nicht über die richtigen Abhängigkeiten oder Abhängigkeitsversionen verfügt. Anwendungen, die Managed Service für Apache Flink nutzen und Apache Beam verwenden, müssen die folgenden Versionen von Abhängigkeiten verwenden:

    <jackson.version>2.10.2</jackson.version> ... <dependency> <groupId>com.fasterxml.jackson.module</groupId> <artifactId>jackson-module-jaxb-annotations</artifactId> <version>2.10.2</version> </dependency>

    Wenn Sie nicht die richtige Version von jackson-module-jaxb-annotations als explizite Abhängigkeit angeben, lädt Ihre Anwendung sie aus den Umgebungsabhängigkeiten, und da die Versionen nicht übereinstimmen, stürzt die Anwendung zur Laufzeit ab.

    Weitere Informationen zum Verwenden von Apache Beam mit Managed Service für Apache Flink finden Sie unter Verwenden CloudFormation.

  • Anwendung schlägt mit java.io.IOException fehl: Unzureichende Anzahl von Netzwerkpuffern

    Dies passiert, wenn einer Anwendung nicht genügend Speicher für Netzwerkpuffer zugewiesen ist. Netzwerkpuffer erleichtern die Kommunikation zwischen Unteraufgaben. Sie werden verwendet, um Datensätze vor der Übertragung über ein Netzwerk zu speichern und eingehende Daten zu speichern, bevor sie in Datensätze zerlegt und an Unteraufgaben übergeben werden. Die Anzahl der benötigten Netzwerkpuffer hängt direkt von der Parallelität und Komplexität Ihres Auftragsdiagramms ab. Es gibt eine Reihe von Ansätzen, um dieses Problem zu beheben:

    • Sie können einen niedrigeren Wert für parallelismPerKpu konfigurieren, sodass pro Unteraufgabe und Netzwerkpuffer mehr Speicher zugewiesen wird. Beachten Sie, dass eine Senkung des Werts für parallelismPerKpu die KPU und damit die Kosten erhöht. Um dies zu vermeiden, können Sie die gleiche Menge an KPU beibehalten, indem Sie die Parallelität um denselben Faktor verringern.

    • Sie können Ihr Auftragsdiagramm vereinfachen, indem Sie die Anzahl der Operatoren reduzieren oder sie so verketten, dass weniger Puffer benötigt werden.

    • Andernfalls können Sie sich an https://aws.amazon.com/premiumsupport/ wenden, um eine benutzerdefinierte Netzwerkpufferkonfiguration zu erhalten.