Bewährte Methoden zur Leistungssteigerung - 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.

Bewährte Methoden zur Leistungssteigerung

In diesem Abschnitt werden besondere Überlegungen zum Entwerfen einer Anwendung im Hinblick auf die Leistung beschrieben.

Richtiges Verwalten der Skalierung

Dieser Abschnitt enthält Informationen zur Verwaltung der Skalierung auf Anwendungs- und Operatorenebene.

Richtiges Verwalten der Anwendungsskalierung

Sie können Auto Scaling verwenden, um unerwartete Spitzen bei der Anwendungsaktivität zu bewältigen. Die KPUs Ihrer Anwendung werden automatisch erhöht, wenn die folgenden Kriterien erfüllt sind:

  • Auto Scaling ist für die Anwendung aktiviert.

  • Die CPU-Auslastung bleibt 15 Minuten lang über 75 Prozent.

Wenn Auto Scaling aktiviert ist, die CPU-Auslastung aber nicht bei diesem Schwellenwert bleibt, skaliert die Anwendung keine KPUs hoch. Wenn Sie einen Anstieg der CPU-Auslastung feststellen, der diesen Schwellenwert nicht erreicht, oder einen Anstieg bei einer anderen Auslastungsmetrik, z. B. heapMemoryUtilization, erhöhen Sie die Skalierung manuell, damit Ihre Anwendung Aktivitätsspitzen bewältigen kann.

Anmerkung

Wenn die Anwendung durch Auto Scaling automatisch mehr Ressourcen hinzugefügt hat, gibt die Anwendung die neuen Ressourcen nach einer gewissen Zeit der Inaktivität frei. Das Herunterskalieren von Ressourcen wirkt sich vorübergehend auf die Leistung aus.

Weitere Informationen zur Skalierung finden Sie unter Skalierung.

Richtiges Verwalten der Operatorenskalierung

Sie können die Leistung Ihrer Anwendung verbessern, indem Sie sicherstellen, dass der Workload Ihrer Anwendung gleichmäßig auf die Worker-Prozesse verteilt ist und dass die Operatoren in Ihrer Anwendung über die Systemressourcen verfügen, die sie für einen stabilen und performanten Betrieb benötigen.

Mithilfe der parallelism-Einstellung können Sie die Parallelität für jeden Operator im Code Ihrer Anwendung festlegen. Wenn Sie die Parallelität für einen Operator nicht festlegen, wird die Parallelitätseinstellung auf Anwendungsebene verwendet. Operatoren, die die Parallelitätseinstellung auf Anwendungsebene verwenden, können potenziell alle für die Anwendung verfügbaren Systemressourcen nutzen, wodurch die Anwendung instabil wird.

Um die Parallelität für jeden Operator optimal zu bestimmen, sollten die relativen Ressourcenanforderungen des Operators im Vergleich zu anderen Operatoren in der Anwendung berücksichtigt werden. Stellen Sie für ressourcenintensivere Operatoren eine höhere Einstellung für die Operatorenparallelität ein als für weniger ressourcenintensive Operatoren.

Die gesamte Operatorenparallelität für die Anwendung ist die Summe der Parallelität für alle Operatoren in der Anwendung. Sie optimieren die gesamte Operatorenparallelität für Ihre Anwendung, indem Sie das beste Verhältnis zwischen ihr und der Gesamtzahl der für Ihre Anwendung verfügbaren Aufgabenslots ermitteln. Ein typisches stabiles Verhältnis zwischen der gesamten Operatorenparallelität und den Aufgabenslots ist 4:1, d. h. in der Anwendung steht für jeweils vier verfügbare Operator-Unteraufgaben ein Aufgabenslot zur Verfügung. Eine Anwendung mit ressourcenintensiveren Operatoren benötigt möglicherweise ein Verhältnis von 3:1 oder 2:1, während eine Anwendung mit weniger ressourcenintensiven Operatoren mit einem Verhältnis von 10:1 stabil sein kann.

Sie können das Verhältnis für den verwendeten Operator mittels Runtime-Eigenschaften festlegen, sodass Sie die Parallelität des Operators anpassen können, ohne Ihren Anwendungscode kompilieren und hochladen zu müssen.

Das folgende Beispiel zeigt, wie Sie die Operatorenparallelität als einstellbares Verhältnis zur aktuellen Anwendungsparallelität festlegen:

Map<String, Properties> applicationProperties = KinesisAnalyticsRuntime.getApplicationProperties(); operatorParallelism = StreamExecutionEnvironment.getParallelism() / Integer.getInteger( applicationProperties.get("OperatorProperties").getProperty("MyOperatorParallelismRatio") );

Informationen zu Unteraufgaben, Aufgabenslots und anderen Anwendungsressourcen finden Sie unter Ressourcen für die Anwendung.

Verwenden Sie die Parallelism-Einstellung und die KeyBy-Partitionsmethode, um die Verteilung des Workloads auf die Worker-Prozesse Ihrer Anwendung zu steuern. Weitere Informationen finden Sie in den folgenden Themen in der Apache-Flink-Dokumentation:

Überwachen der Nutzung externer Abhängigkeitsressourcen

Wenn an einem Ziel (wie Kinesis Streams, Firehose, DynamoDB oder OpenSearch Service) ein Leistungsengpass auftritt, wird Ihre Anwendung einem Gegendruck ausgesetzt. Stellen Sie sicher, dass Ihre externen Abhängigkeiten für Ihren Anwendungsdurchsatz ordnungsgemäß bereitgestellt wurden.

Anmerkung

Fehler in anderen Services können zu Fehlern in Ihrer Anwendung führen. Wenn Sie Fehler in Ihrer Anwendung feststellen, überprüfen Sie die CloudWatch Protokolle für Ihre Zieldienste auf Fehler.

Lokales Ausführen Ihrer Apache-Flink-Anwendung

Um Speicherprobleme zu beheben, können Sie Ihre Anwendung in einer lokalen Flink-Installation ausführen. Dadurch erhalten Sie Zugriff auf Debugging-Tools wie Stack-Trace und Heap-Dumps, die nicht verfügbar sind, wenn Sie Ihre Anwendung in Managed Service für Apache Flink ausführen.

Informationen zum Erstellen einer lokalen Flink-Installation finden Sie unter Standalone in der Apache Flink-Dokumentation.