Gibt es eine Methode, mit der eine laufende Flink-App den Gegendruckstatus abrufen kann?Java

Java-Forum
Anonymous
 Gibt es eine Methode, mit der eine laufende Flink-App den Gegendruckstatus abrufen kann?

Post by Anonymous »

Gibt es im Java-Code für eine Flink-App eine Möglichkeit festzustellen, ob die App derzeit einem Gegendruck ausgesetzt ist? Flink erzeugt Gegendruckmetriken, die wir von außerhalb der App überwachen können, aber ich finde derzeit nichts in der Java-API, das es der Anwendung selbst ermöglichen würde, zu erkennen, ob Gegendruck herrscht.
Der Grund, warum mir das gefallen würde, ist, dass wir eine Apache Flink Java-App mit einem integrierten dynamischen Ratenbegrenzer haben. Der Ratenbegrenzer basiert auf einem Token-Bucket mit elastischer Kapazität. Wenn die App alle Token verwendet, kann der Token-Bucket mit der Zeit größer werden. Wenn die App die Token nicht verwendet, wird der Token-Bucket kleiner. Dadurch kann die Anwendung einen Anstieg der Arbeitslast ohne plötzliche Spitzen in der Verarbeitungsgeschwindigkeit bewältigen. Dies ist in unserem Zusammenhang wichtig, da einige nachgelagerte Anwendungen über eine elastische Kapazität verfügen, aber bei steigender Auslastung Zeit benötigen, um mehr Ressourcen zuzuweisen. Sie stürzen ab, wenn die Ausgabe unserer Anwendung stark ansteigt.
Der Code zum Aufrufen der Ratenbegrenzung ist wie folgt implementiert:

Code: Select all

// Rate limiting, block until a token is available.
var tokenBucket = ThreadLocalsManager.getTokenBucket(
bucketConfig,
getRuntimeContext().getNumberOfParallelSubtasks()
);
long waitTimeMs = tokenBucket.blockUntilToken();
Die blockUntilToken-Methode verursacht einen Gegendruck in der Flink-App, der verhindert, dass sie schneller arbeitet, als es der Token-Bucket zulässt. Es gibt einen Token-Bucket pro Parallelität. Durch die Übergabe der Anzahl paralleler Unteraufgaben kann er ermitteln, welcher Anteil der Gesamtarbeit der App von diesem bestimmten Bucket erledigt werden kann. Insgesamt funktioniert dies sehr gut.
Wenn die Anwendung jedoch aus einem anderen Grund als dem Ratenlimit einen Gegendruck erfährt, verwendet sie nicht alle ihr zur Verfügung stehenden Token. Dies führt dazu, dass der Token-Bucket schrumpft, obwohl die App in Rückstand gerät und einen Rückstand aufbaut. Wenn der Gegendruckstatus über die Flink-Java-API verfügbar wäre, könnte ich damit verhindern, dass der Token-Bucket in solchen Situationen schrumpft.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post