Flink Autoscaler - Amazon EMR

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.

Flink Autoscaler

Amazon-EMR-Versionen 6.15.0 und höher unterstützen Flink Autoscaler. Die Auftrag-Autoscaler-Funktion sammelt Metriken von laufenden Flink-Streaming-Aufträgen und skaliert automatisch die einzelnen Scheitelpunkte der Aufträge. Dadurch wird der Gegendruck reduziert und das von Ihnen festgelegte Nutzungsziel wird erfüllt.

Weitere Informationen finden Sie im Abschnitt Autoscaler in der Dokumentation zu Apache Flink Kubernetes Operator.

  • Flink Autoscaler wird mit Amazon EMR 6.15.0 und höher unterstützt.

  • Flink Autoscaler wird nur für Streaming-Aufträge unterstützt.

  • Nur der adaptive Scheduler wird unterstützt. Der Standard-Scheduler wird nicht unterstützt.

  • Wir empfehlen Ihnen, die Cluster-Skalierung zu aktivieren, um eine dynamische Ressourcenbereitstellung zu ermöglichen. Amazon EMR Managed Scaling wird bevorzugt, weil die Metrikauswertung alle 5 bis 10 Sekunden erfolgt. In diesem Intervall kann sich Ihr Cluster leichter an die Änderung der erforderlichen Cluster-Ressourcen anpassen.

Gehen Sie wie folgt vor, um den Flink Autoscaler zu aktivieren, wenn Sie einen Amazon EMR in einem EC2-Cluster erstellen.

  1. Erstellen Sie in der Amazon-EMR-Konsole einen neuen EMR-Cluster:

    1. Wählen Sie Amazon EMR Version emr-6.15.0 oder höher aus. Wählen Sie das Flink-Anwendungspaket und alle anderen Anwendungen aus, die Sie möglicherweise in Ihren Cluster aufnehmen möchten.

      Application bundle icons including Flink, HBase, Presto, and Trino. (AI generated)
    2. Wählen Sie unter Option Cluster scaling and provisioning (Cluster-Skalierung und -Bereitstellung) Use EMR-managed scaling (EMR-verwaltete Skalierung verwenden) aus.

      Three options for scaling an EMR Cluster: set size manually, use EMR-managed scaling, or custom automatic scaling. (AI generated)
  2. Geben Sie im Abschnitt Software settings (Softwareeinstellungen) die folgende Konfiguration ein, um Flink Autoscaler zu aktivieren. Stellen Sie für Testszenarien das Entscheidungsintervall, das Metrikfensterintervall und das Stabilisierungsintervall auf einen niedrigeren Wert ein, sodass der Auftrag sofort eine Skalierungsentscheidung trifft, um die Überprüfung zu vereinfachen.

    [ { "Classification": "flink-conf", "Properties": { "job.autoscaler.enabled": "true", "jobmanager.scheduler": "adaptive", "job.autoscaler.stabilization.interval": "60s", "job.autoscaler.metrics.window": "60s", "job.autoscaler.decision.interval": "10s", "job.autoscaler.debug.logs.interval": "60s" } } ]
  3. Wählen oder konfigurieren Sie alle anderen Einstellungen nach Ihren Wünschen und erstellen Sie den Flink-Autoscaler-fähigen Cluster.

In diesem Abschnitt werden die meisten Konfigurationen behandelt, die Sie je nach Ihren spezifischen Anforderungen ändern können.

Anmerkung

Bei zeitbasierten Konfigurationen wie time-, interval- und window-Einstellungen ist die Standardeinheit, wenn keine Einheit angegeben ist, Millisekunden. Ein Wert von 30 ohne Suffix entspricht also 30 Millisekunden. Geben Sie für andere Zeiteinheiten das entsprechende Suffix s für Sekunden, m für Minuten oder h für Stunden an.

Autoscaler ruft die Metriken auf Ebene des Auftragsscheitelpunkts alle paar konfigurierbare Zeitintervalle ab, wandelt sie in umsetzbare Maßeinheiten um, schätzt die Parallelität neuer Auftragsscheitelpunkte und empfiehlt sie dem Auftrags-Scheduler. Metriken werden erst nach dem Neustart des Auftrags und dem Cluster-Stabilisierungsintervall erfasst.

Konfigurationsschlüssel Standardwert Beschreibung Beispielwerte
job.autoscaler.enabled false Aktivieren Sie die automatische Skalierung auf Ihrem Flink-Cluster. true, false
job.autoscaler.decision.interval 60s Autoscaler-Entscheidungsintervall. 30 (Standardeinheit ist Millisekunden), 5m, 1h
job.autoscaler.restart.time 3m Die erwartete Neustartzeit wird verwendet, bis der Bediener sie anhand des Verlaufs zuverlässig ermitteln kann. 30 (Standardeinheit ist Millisekunden), 5m, 1h
job.autoscaler.stabilization.interval 300s Stabilisierungszeitraum, in dem keine neue Skalierung durchgeführt wird. 30 (Standardeinheit ist Millisekunden), 5m, 1h
job.autoscaler.debug.logs.interval 300s Intervall für Autoscaler-Debug-Protokolle. 30 (Standardeinheit ist Millisekunden), 5m, 1h

Autoscaler ruft die Metriken ab, aggregiert sie über ein zeitbasiertes gleitendes Fenster und wertet sie zu Skalierungsentscheidungen aus. Der Verlauf der Skalierungsentscheidungen für jeden Auftragsscheitelpunkt wird verwendet, um die neue Parallelität abzuschätzen. Diese haben sowohl ein altersabhängiges Verfallsdatum als auch eine historische Größe (mindestens 1).

Konfigurationsschlüssel Standardwert Beschreibung Beispielwerte
job.autoscaler.metrics.window 600s Scaling metrics aggregation window size. 30 (Standardeinheit ist Millisekunden), 5m, 1h
job.autoscaler.history.max.count 3 Maximale Anzahl vergangener Skalierungsentscheidungen, die pro Scheitelpunkt beibehalten werden sollen. 1 auf Integer.MAX_VALUE
job.autoscaler.history.max.age 24h Mindestanzahl vergangener Skalierungsentscheidungen, die pro Scheitelpunkt beibehalten werden sollen. 30 (Standardeinheit ist Millisekunden), 5m, 1h

Die Parallelität jedes Auftragsscheitelpunkts wird auf der Grundlage der Zielauslastung geändert und durch die Min./Max.-Parallelitätsgrenzen begrenzt. Es wird nicht empfohlen, die Zielauslastung auf nahezu 100 % festzulegen (d. h. den Wert 1), und die Nutzungsgrenze dient als Puffer, um die zwischenzeitlichen Lastschwankungen zu bewältigen.

Konfigurationsschlüssel Standardwert Beschreibung Beispielwerte
job.autoscaler.target.utilization 0.7 Nutzung des Zielscheitelpunkts. 0 - 1
job.autoscaler.target.utilization.boundary 0.4 Nutzung des Zielscheitelpunkts. Die Skalierung wird nicht durchgeführt, wenn die aktuelle Verarbeitungsrate innerhalb von [target_rate / (target_utilization - boundary) und (target_rate / (target_utilization + boundary)] liegt 0 - 1
job.autoscaler.vertex.min-parallelism 1 Die Mindestparallelität, die der Autoscaler verwenden kann. 0 - 200
job.autoscaler.vertex.max-parallelism 200 Die maximale Parallelität, die der Autoscaler verwenden kann. Der Autoscaler ignoriert dieses Limit, wenn es höher ist als die maximale Parallelität, die in der Flink-Konfiguration oder direkt für jeden Bediener konfiguriert wurde. 0 - 200

Der Auftragsscheitelpunkt benötigt zusätzliche Ressourcen, um die ausstehenden Ereignisse oder Rückstände zu bewältigen, die sich während des Skalierungsvorgangs ansammeln. Dies wird auch als die catch-up-Dauer bezeichnet. Wenn die Zeit für die Verarbeitung des Backlogs den konfigurierten lag -threshold-Wert überschreitet, steigt die Zielauslastung des Auftragsscheitelpunkts auf den Höchstwert. Auf diese Weise können unnötige Skalierungsvorgänge während der Backlog-Verarbeitung vermieden werden.

Konfigurationsschlüssel Standardwert Beschreibung Beispielwerte
job.autoscaler.backlog-processing.lag-threshold 5m Verzögerungsschwellenwert, der unnötige Skalierungen verhindert und gleichzeitig die ausstehenden Nachrichten entfernt, die für die Verzögerung verantwortlich sind. 30 (Standardeinheit ist Millisekunden), 5m, 1h
job.autoscaler.catch-up.duration 15m Die Zieldauer für die vollständige Backlog-Verarbeitung nach einem Skalierungsvorgang. Auf 0 setzen, um die Backlog-basierte Skalierung zu deaktivieren. 30 (Standardeinheit ist Millisekunden), 5m, 1h

Autoscaler führt die Herunterskalierung innerhalb einer Kulanzzeit nicht unmittelbar nach einer Hochskalierung durch. Dadurch wird ein unnötiger Zyklus von Hoch- und Herunterskalierungsvorgängen, die durch vorübergehende Lastschwankungen verursacht werden, vermieden.

Wir können das Verhältnis der Herunterskalierung verwenden, um die Parallelität schrittweise zu verringern und Ressourcen freizusetzen, um vorübergehende Lastspitzen auszugleichen. Das trägt auch dazu bei, unnötige kleinere Hochskalierungsvorgänge nach einer umfangreichen Herunterskalierung zu vermeiden.

Wir können einen ineffektiven Skalierungsvorgang auf der Grundlage vergangener Entscheidungen über die Skalierung von Auftragsscheitelpunkten erkennen, um weitere Änderungen der Parallelität zu verhindern.

Konfigurationsschlüssel Standardwert Beschreibung Beispielwerte
job.autoscaler.scale-up.grace-period 1h Dauer, in der ein Scheitelpunkt nicht herunterskaliert werden darf, nachdem er hochskaliert wurde. 30 (Standardeinheit ist Millisekunden), 5m, 1h
job.autoscaler.scale-down.max-factor 0.6 Maximaler Herunterskalierungsfaktor. Ein Wert von 1 bedeutet, dass es keine Begrenzung der Herunterskalierung gibt. 0.6 bedeutet, dass der Auftrag nur mit 60 % der ursprünglichen Parallelität herunterskaliert werden kann. 0 - 1
job.autoscaler.scale-up.max-factor 100000. Maximales Verhältnis der Hochskalierung. Der Wert 2.0 bedeutet, dass der Auftrag nur mit 200 % der aktuellen Parallelität hochskaliert werden kann. 0 - Integer.MAX_VALUE
job.autoscaler.scaling.effectiveness.detection.enabled false Ob ineffektive Skalierungsvorgänge erkannt werden sollen und ob der Autoscaler weitere Hochskalierungen blockieren kann. true, false