Warum treten bei Kinesis-Datenströmen Probleme mit hoher Latenz auf?

Lesedauer: 3 Minute
0

Ich möchte wissen, warum mein Amazon Kinesis-Datenstrom beim Abrufen von Datensätzen eine hohe Latenz hat.

Kurzbeschreibung

GetRecords.Latency kann zunehmen, wenn die Anzahl der Datensätze oder die Datensatzgröße für jede GET-Anfrage zunimmt. Wenn Sie Ihre Anwendung neu starten, während der Producer Daten in den Stream aufnimmt, können sich Datensätze ansammeln, ohne verbraucht zu werden. Diese Erhöhung der Datensatzanzahl oder der abzurufenden Datenmenge erhöht den Wert für GetRecords.Latency. Wenn eine Anwendung die Aufnahmerate nicht einholen kann, wird der IteratorAge erhöht.

Anmerkung: Wenn Sie die serverseitige Verschlüsselung für Ihren Kinesis-Datenstrom aktivieren, kann sich Ihre Latenz erhöhen.

Lösung

Überwachen Sie den Kinesis Datenstrom-Service mit Amazon CloudWatch. Überprüfen Sie die CloudWatch-Metriken wie GetRecords.Latency, um zu überprüfen, ob die Latenz kontinuierlich zunimmt. Wenn die Latenz kontinuierlich zunimmt, überprüfen Sie, ob auch die Metriken IncomingRecords, IncomingBytes, GetRecords.Records und GetRecords.Bytes CloudWatch zunehmen. Mit steigendem Datenvolumen nehmen diese Metriken zu und verursachen eine hohe Latenz. Dieser Anstieg ist darauf zurückzuführen, dass GetRecords mehr Datensätze abruft, wenn mehr Datensätze im Kinesis-Datenstrom verfügbar sind.

Wenn Ihr IteratorAge ebenfalls gestiegen ist, werden wahrscheinlich mehr IncomingBytes in den Stream aufgenommen. Überprüfen Sie die IncomingBytes-Metrik in CloudWatch, um zu überprüfen, ob die Anzahl der Bytes gestiegen ist. Sie können überprüfen, ob weniger GetRecords-Aufrufe an den Stream gesendet werden. Mehr eingehende Bytes bedeuten, dass jeder GetRecords-Aufruf mehr Daten abruft und der Wert für GetRecords.Latency erhöht wird.

Wenn Sie weiterhin eine hohe Latenz beobachten (obwohl es keinen Anstieg von IncomingBytes oder IncomingRecords gibt), sind möglicherweise zu viele eingehende Daten vorhanden. Wenn die Verbraucheranwendung die eingehenden Daten nicht einholen kann, sammeln sich die Daten weiterhin im Kinesis-Datenstrom an. Selbst wenn Sie die Anwendung neu starten, werden bei jedem GetRecords-Aufruf weitere Datensätze abgerufen. Die Zunahme der Datensätze oder abgerufenen Daten für jeden GetRecords-Aufruf erhöht dann den Wert für GetRecords.Latency.

Gehen Sie wie folgt vor, um dieses Problem zu beheben:

  • Überprüfen Sie Ihre Anwendung, um festzustellen, ob genügend GetRecords-Aufrufe getätigt wurden, um das eingehende Datenvolumen zu verarbeiten. Wenn Sie die Amazon Kinesis Client Library (KCL)-Anwendung oder AWS Lambda als Verbraucher verwenden, erhöhen Sie die Anzahl der Shards in Ihrem Stream. Eine Erhöhung der Shard-Anzahl erhöht die Nutzungsrate aus dem Lieferstrom und verringert die Werte für IteratorAge und GetRecords.Latency.
  • Erhöhen Sie die Aufbewahrungsfrist des Kinesis-Datenstroms, um Datenverluste zu vermeiden. Eine längere Aufbewahrungsfrist kann Ihrer Anwendung helfen, den Datenrückstand aufzuholen.
  • Wenn Sie eine Verbraucheranwendung haben, überprüfen Sie das Verarbeitungsprotokoll und zeichnen Sie die Verarbeitungszeit auf.
  • Prüfen Sie die Zentraleinheit (CPU) und die Speicherauslastung Ihres Systems, um festzustellen, ob Sie mehr Speicher freigeben müssen.
AWS OFFICIAL
AWS OFFICIALAktualisiert vor 5 Monaten