Eine kurze Diskussion über Flinks fehlertoleranten Mechanismus: Jobausführung und Daemon

Eine kurze Diskussion über Flinks fehlertoleranten Mechanismus: Jobausführung und Daemon

1. Fehlertoleranz bei der Jobausführung

Der Fehlerbehebungsmechanismus von Flink ist in mehrere Ebenen unterteilt, nämlich die Failover-Strategie auf Ausführungsebene und die Job-Neustart-Strategie auf Ausführungsgraphebene. Wenn ein Fehler auftritt, versucht Flink zunächst, einen kleinen Fehlerbehebungsmechanismus auszulösen. Wenn der Fehler immer noch nicht behoben werden kann, wird auf einen größeren Fehlerbehebungsmechanismus umgestellt. Einzelheiten finden Sie im folgenden Sequenzdiagramm.

Wenn ein Taskfehler auftritt, benachrichtigt der TaskManager den JobManager über RPC, wodurch der Status der entsprechenden Ausführung in „Fehlgeschlagen“ geändert und die Failover-Strategie ausgelöst wird. Wenn die Failover-Richtlinie erfüllt ist, startet der JobManager die Ausführung neu, andernfalls wird ein Upgrade auf einen Fehler des ExecutionGraph durchgeführt. Wenn ein Ausführungsgraph fehlschlägt, wechselt er in den Fehlerzustand und die Neustartstrategie bestimmt, ob er neu gestartet wird (Neustartzustand) oder abnormal beendet wird (Fehlerzustand).

1.1 Task-Failover-Strategie

Derzeit gibt es drei Task-Failover-Strategien: RestartAll, RestartIndividualStrategy und RestartPipelinedRegionStrategy.

RestartAll: Der Neustart aller Aufgaben ist die sicherste Strategie zum Wiederherstellen der Jobkonsistenz und wird als Fallback-Strategie verwendet, wenn andere Failover-Strategien fehlschlagen. Derzeit die standardmäßige Task-Failover-Strategie.

RestartPipelinedRegionStrategy: Starten Sie alle Aufgaben in der Region neu, in der sich die fehlerhafte Aufgabe befindet. Die Aufgabenregion wird durch die Datenübertragung der Aufgabe bestimmt. Aufgaben mit Datenübertragung werden in derselben Region platziert, und es findet kein Datenaustausch zwischen verschiedenen Regionen statt.

RestartIndividualStrategy: Eine einzelne Aufgabe fortsetzen. Denn wenn die Aufgabe keine Datenquelle enthält, ist ein erneutes Streamen der Daten nicht möglich und es kann zu Datenverlust kommen. In Anbetracht der Bereitstellung von mindestens einer Zustellungssemantik ist der Anwendungsbereich dieser Strategie relativ begrenzt und wird nur auf Jobs angewendet, bei denen kein Datentransfer zwischen Aufgaben stattfindet.

1.2 Strategie zum Neustarten von Jobs

Wenn ein Task-Fehler letztendlich einen vollständigen Neustart auslöst, steuert die Job-Neustart-Strategie, ob der Job fortgesetzt werden muss. Flink bietet drei jobspezifische Neustartstrategien.

FixedDelayRestartStrategy: Lässt Ausführungsfehler innerhalb einer bestimmten Anzahl von Malen zu. Wenn die Anzahl überschritten wird, schlägt der Job fehl. Mit dem Neustart von FixedDelayRestartStrategy können Sie eine bestimmte Verzögerung festlegen, um die Belastung externer Systeme und unnötige Fehlerprotokolle durch häufige Wiederholungsversuche zu verringern.

FailureRateRestartStrategy: Lässt zu, dass die Ausführung innerhalb einer bestimmten Anzahl von Malen innerhalb eines bestimmten Zeitfensters fehlschlägt. Wenn diese Häufigkeit überschritten wird, schlägt der Auftrag fehl. In ähnlicher Weise kann mit FailureRateRestartStrategy auch eine bestimmte Neustartverzögerung festgelegt werden.

NoRestartStrategy: Den Job direkt abbrechen, wenn die Ausführung fehlschlägt.

2. Daemon-Fehlertoleranz

Im Bereitstellungsmodus von Flink auf YARN sind JobManager und TaskManager die wichtigsten Daemons. Die Hauptaufgaben von JobManager bestehen darin, Ressourcen zu koordinieren und die Ausführung von Jobs zu verwalten, die jeweils von den Daemon-Threads ResourceManager und JobMaster ausgeführt werden. Die Beziehung zwischen den dreien wird in der folgenden Abbildung dargestellt.

2.1 TaskManager-Fehlertoleranz

Wenn der ResourceManager einen TaskManager-Ausfall durch ein Heartbeat-Timeout erkennt oder vom Cluster-Manager benachrichtigt wird, benachrichtigt er den entsprechenden JobMaster und startet einen neuen TaskManager, um ihn zu ersetzen. Beachten Sie, dass sich der ResourceManager nicht um den Flink-Job kümmert. Es liegt in der Verantwortung des JobMasters, die Reaktion des Flink-Jobs zu verwalten.

Wenn der JobMaster durch eine Benachrichtigung vom ResourceManager vom Fehler des TaskManagers erfährt oder ein Heartbeat-Timeout erkennt, entfernt er zunächst den TaskManager aus seinem Slot-Pool und markiert alle auf dem TaskManager laufenden Tasks als fehlgeschlagen, wodurch der Fehlertoleranzmechanismus der Flink-Jobausführung ausgelöst wird, um den Job wiederherzustellen.

Der TaskManager-Status wurde in den Prüfpunkt geschrieben und wird nach dem Neustart automatisch wiederhergestellt, sodass keine Probleme mit Dateninkonsistenzen auftreten.

2.2. Fehlertoleranz des ResourceManagers

Wenn der TaskManager einen Ausfall des ResourceManagers durch ein Heartbeat-Timeout erkennt oder von Zookeeper eine Benachrichtigung erhält, dass der ResourceManager die Führung verloren hat, sucht der TaskManager nach einem neuen Anführer und der ResourceManager wird neu gestartet und registriert sich bei ihm, ohne die Ausführung der Tasks zu unterbrechen.

Wenn JobMaster einen Ausfall des ResourceManagers durch ein Heartbeat-Timeout erkennt oder von Zookeeper eine Benachrichtigung erhält, dass der ResourceManager die Führung verloren hat, wartet JobMaster ebenfalls darauf, dass der neue ResourceManager die Führung übernimmt, und fordert dann alle TaskManager erneut an. Da die Wiederherstellung des TaskManagers auch erfolgreich sein kann, wird der vom JobMaster neu angeforderte TaskManager nach einer gewissen Zeit der Inaktivität freigegeben.

ResourceManager verwaltet zahlreiche Statusinformationen, darunter aktive Container, verfügbare TaskManager, die Zuordnungsbeziehung zwischen TaskManagern und JobMastern usw. Diese Informationen stellen jedoch keine Grundwahrheit dar und können aus der Statussynchronisierung mit JobMaster und TaskManager abgerufen werden. Daher müssen diese Informationen nicht beibehalten werden.

2.3 JobMaster-Fehlertoleranz

Wenn der TaskManager einen JobMaster-Fehler durch ein Heartbeat-Timeout erkennt oder von Zookeeper eine Benachrichtigung erhält, dass der JobMaster die Führung verloren hat, löst der TaskManager seine eigene Fehlerbehebung aus und wartet dann auf einen neuen JobMaster. Erscheint der neue JobMaster nach einer gewissen Zeit nicht, kennzeichnet der TaskManager dessen Slot als frei und informiert den ResourceManager darüber.

Wenn ResourceManager einen JobMaster-Fehler durch ein Heartbeat-Timeout erkennt oder eine Benachrichtigung von Zookeeper erhält, dass JobMaster die Führung verloren hat, informiert ResourceManager TaskManager über den Fehler und führt keine weiteren Aktionen aus.

JobMaster speichert viele Zustände, die für die Jobausführung kritisch sind. Darunter werden JobGraph und Benutzercode aus einem dauerhaften Speicher wie HDFS abgerufen, Checkpoint-Informationen werden von Zookeeper abgerufen, Informationen zur Taskausführung können möglicherweise nicht wiederhergestellt werden, da der gesamte Job neu geplant wird, und die gehaltenen Slots werden aus den Synchronisierungsinformationen des TaskManagers von ResourceManager wiederhergestellt.

2.4 Gleichzeitig auftretende Fehler

Im Bereitstellungsmodus von Flink im YARN befinden sich JobMaster und ResourceManager beide im JobManager-Prozess. Wenn also ein Problem mit dem JobManager-Prozess auftritt, liegt dies normalerweise an einem gleichzeitigen Fehler von JobMaster und ResourceManager. Dann behandelt TaskManager das Problem wie folgt:

  • Befolgen Sie die normalen Fehlerbehandlungsverfahren von JobMaster.
  • Versuchen Sie weiterhin, neuen JobMastern über einen bestimmten Zeitraum hinweg Plätze anzubieten.
  • Versucht weiterhin, sich beim ResourceManager zu registrieren.

Es ist erwähnenswert, dass der neue JobManager automatisch gestartet wird, indem er sich auf den Wiederholungsmechanismus für Anwendungsversuche von YARN verlässt. Gemäß dem in Flink konfigurierten Verhalten „YARN-Anwendung: Container über Anwendungsversuche hinweg behalten“ wird der TaskManager nicht bereinigt, sodass er beim neu gestarteten Flink ResourceManager und JobMaster erneut registriert werden kann.

Abschluss

Der Fehlertoleranzmechanismus von Flink stellt die Zuverlässigkeit und Haltbarkeit von Flink sicher. Insbesondere umfasst er zwei Aspekte: Fehlertoleranz bei der Jobausführung und Daemon-Fehlertoleranz. In Bezug auf die Fehlertoleranz bei der Jobausführung bietet Flink Failover-Strategien auf Task-Ebene und Neustart-Strategien auf Job-Ebene für automatische Wiederholungsversuche im Fehlerfall. In Bezug auf die Daemon-Fehlertoleranz führt Flink im YARN-Modus eine Fehlererkennung durch den Heartbeat interner Komponenten und die YARN-Überwachung durch. Der Ausfall eines TaskManagers kann behoben werden, indem ein neuer TaskManager beantragt und die Aufgabe oder der Job neu gestartet wird. Der Ausfall eines JobManagers kann behoben werden, indem der Cluster-Manager automatisch einen neuen JobManager hochlädt und den TaskManager beim neuen führenden JobManager neu registriert.

Oben finden Sie eine kurze Erläuterung der Details von Flinks fehlertolerantem Mechanismus, Jobausführung und Daemon. Weitere Informationen zu Flinks fehlertolerantem Mechanismus, Jobausführung und Daemon finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM!

Das könnte Sie auch interessieren:
  • SpringBoot erklärt sehr ausführlich, wie Flink bereitgestellt und verpackt wird
  • Beispiel für die Verarbeitung von Domänennamen in einer Flink-Einstiegsanwendung
  • Analysieren Sie die Kernprinzipien von Flink und implementieren Sie Kernabstraktionen
  • Welche Datentypen unterstützt Flink?
  • Flink Stream Processing Engine Zero-Based Quick Pass: Datenextraktion

<<:  Eine kurze Erläuterung des Sperrbereichs der MySQL-Next-Key-Sperre

>>:  Verschiedene Methoden zum Aufrufen von js in einem werden herausgestellt und zur Verwendung empfohlen.

Artikel empfehlen

Zusammenfassung der Verwendung von vue Watch und Computed

Inhaltsverzeichnis 01. Hörer beobachten (1) Funkt...

Eine kleine Frage zur Ausführungsreihenfolge von SQL in MySQL

Ich bin heute bei der Arbeit auf ein SQL-Problem ...

Datenbankübergreifende Assoziationsabfragemethode in MySQL

Geschäftsszenario: Abfragen von Tabellen in versc...

Ubuntu 19.04 Installationstutorial (Schritte in Bild und Text)

1. Vorbereitung 1.1 Laden Sie VMware 15 herunter ...

So legen Sie den Fokus auf HTML-Elemente fest

Code kopieren Der Code lautet wie folgt: <Körp...

Fallstudie zum Vue-Einkaufswagen

Inhaltsverzeichnis 1. Warenkorb-Beispiel 2. Code-...

Eine kurze Diskussion über die Leistungsprobleme des MySQL-Paging-Limits

MySQL-Paging-Abfragen werden normalerweise über L...

Implementierungscode der HTML-Floating-Promptbox-Funktion

Allgemeine Formulareingabeaufforderungen belegen ...

Detaillierte Erklärung der Speicher-Engine in MySQL

Übersicht über die MySQL-Speicher-Engine Was ist ...

Unterschied zwischen varchar- und char-Typen in MySQL

Inhaltsverzeichnis vorgenannt VARCHAR-Typ VARCHAR...

Best Practices für die Entwicklung von Amap-Anwendungen mit Vue

Inhaltsverzeichnis Vorwort Asynchrones Laden Pake...