Warum erhöht sich meine Lambda-IteratorAge-Metrik und wie verringere ich sie?

Lesedauer: 6 Minute
0

Meine AWS-Lambda-Funktion weist einen Anstieg (oder Spitzen) in der IteratorAge-Metrik auf.

Kurzbeschreibung

Das Alter des Iterators (IteratorAge) einer Lambda-Funktion erhöht sich, wenn die Funktion die Daten nicht effizient verarbeiten kann, die in die Streams geschrieben werden, von denen die Funktion aufgerufen wird. Erhöhen Sie den Durchsatz bei der Stream-Verarbeitung, um die IteratorAge-Metrik Ihrer Funktion zu verringern.

Die IteratorAge-Metrik einer Funktion wird durch folgende Faktoren beeinflusst:

Lesen Sie diesen Artikel, um zu erfahren, wie sich die einzelnen Faktoren auf das Alter des Iterators auswirken. Passen Sie anschließend die Konfiguration Ihrer Funktion oder Ihres Streams an, um das Alter des Iterators Ihrer Funktion basierend auf Ihrem Anwendungsfall zu verringern. Weitere Informationen zu Lambda-Aufrufen finden Sie unter Arbeiten mit Lambda-Funktionsmetriken.

Hinweis: Informationen zu Amazon DynamoDB Streams finden Sie unter Warum steigt die Lambda-IteratorAge-Metrik für meine Amazon DynamoDB-Streams?

Behebung

Reduzieren Sie die Laufzeit Ihrer Funktion

Eine lange Laufzeitdauer erhöht das Alter des Iterators einer Funktion. Die Reduzierung der Dauer erhöht den Durchsatz einer Funktion, wodurch sich das Alter des Iterators einer Funktion verringert.

Führen Sie eine oder beide der folgenden Aktionen aus, um die Laufzeitdauer Ihrer Funktion zu verringern:

1.    Erhöhen Sie die der Funktion zugewiesene Arbeitsspeichermenge.. Lambda weist CPU-Leistung proportional zum Arbeitsspeicher zu.

2.    Optimieren Sie Ihren Funktionscode, um die Verarbeitung von Datensätzen zu beschleunigen.

Hinweis: Weitere Informationen zu Dauer und Leistung im Zusammenhang mit Lambda finden Sie unter Verwenden von AWS Lambda mit AWS X-Ray.

Erhöhen der Batch-Größe Ihres Streams

Wenn die Laufzeitdauer Ihrer Funktion von der Anzahl der Datensätze in einem Ereignis unabhängig ist, führt eine Erhöhung der Batch-Größe Ihrer Funktion zu einer Verringerung des Iterator-Alters.

Eine Anleitung zum Erhöhen der Batch-Größe Ihrer Funktion finden Sie unter Konfigurieren eines Streams als Ereignisquelle.

Hinweis: Wenn die Dauer Ihrer Funktion von der Anzahl der Datensätze in einem Ereignis abhängt, führt eine Erhöhung der Batch-Größe Ihrer Funktion nicht zu einer Verringerung des Iterator-Alters. Weitere Informationen finden Sie unter Arbeiten mit Streams.

Sicherstellen, dass Ihre Funktion Aufruffehler ordnungsgemäß behandelt

Aufruffehler können dazu führen, dass eine Lambda-Funktion mehr Zeit benötigt, um ein Ereignis zu verarbeiten, oder dass ein Ereignis mehrmals verarbeitet wird. Da Ereignisdatensätze der Reihe nach gelesen werden, kann eine Funktion nicht mit späteren Datensätzen fortfahren, wenn bei den Wiederholungsversuchen für einen Datensatz-Batch immer wieder ein Fehler auftritt. In diesem Fall erhöht sich das Alter des Iterators linear mit dem Alter der Datensätze.

Falls Ihre Funktion einen Fehler zurückgibt, unternimmt Lambda weitere Versuche, den Batch zu verarbeiten. Die Wiederholungsversuche für den Batch werden fortgesetzt, bis die Verarbeitung erfolgreich ist, die maximale Anzahl von Wiederholungsversuchen erreicht wurde oder die Daten aus dem Stream ablaufen.

Stellen Sie sicher, dass Ihre Funktion die in den Stream geschriebenen Datensätze ordnungsgemäß behandelt. Bei der Entwicklung Ihrer Funktion können Protokollierung und Instrumentierung für Ihren Code hilfreich sein, um Fehler zu diagnostizieren.

Weitere Informationen finden Sie unter:

Behandeln von Drosselungen

Da Ereignisdatensätze der Reihe nach gelesen werden, kann eine Funktion nicht mit dem nächsten Datensatz fortfahren, wenn der aktuelle Aufruf gedrosselt ist. In diesem Fall erhöht sich das Alter des Iterators, während Lambda die gedrosselten Aufrufe wiederholt.

Sie können die Drosselung für Ihre Lambda-Funktion behandeln, indem Sie eine Erhöhung des Gleichzeitigkeitslimits beantragen oder Leistungsprobleme in der Funktion überprüfen.

Gleichmäßiges Verteilen der Datensätze im Stream

Partitionsschlüssel in den einzelnen Datensätzen bestimmen jeweils die Shards im Stream, in die die Datensätze geschrieben werden. Wenn bei Ihrem Stream mehr Datenverkehr mit Datensätzen anfällt, die den gleichen Partitionsschlüssel enthalten, führt dies dazu, dass ein Shard unverhältnismäßig viele Datensätze erhält. Dies führt zu einem heißen Shard.

Mithilfe der erweiterten Kinesis-Metriken auf Shard-Ebene können Sie die Erfassungsrate für jeden Shard überprüfen und Probleme im Zusammenhang mit einem heißen Shard behandeln.

Weitere Informationen finden Sie unter Under the hood: Scaling your Kinesis data streams (Unter der Haube: Skalieren Ihrer Kinesis-Datenströme).

Erhöhen der Shard-Anzahl Ihres Streams

Eine geringe Anzahl von Shards in einem Stream erhöht das Alter des Iterators einer Funktion. Durch Erhöhen der Shard-Anzahl in einem Stream erhöht sich die Anzahl gleichzeitiger Lambda-Funktionen, die Ihren Stream nutzen, wodurch sich wiederum das Alter des Iterators einer Funktion verringert.

Eine Anleitung zum Erhöhen der Shard-Anzahl Ihres Streams finden Sie unter Resharding eines Streams.

Hinweis: Die Shard-Aufteilung hat keine unmittelbaren Auswirkungen auf das Alter des Iterators einer Funktion. Bereits vorhandene Datensätze bleiben in den Shards, in die sie geschrieben wurden. Diese Shards müssen ihren Rückstand aufholen, bevor sich das Alter des Iterators für die Shards verringert. Weitere Informationen finden Sie unter Arbeiten mit Streams.

Erhöhen des Durchsatzes bei der Stream-Verarbeitung durch Testen verschiedener Einstellungen für den Parallelisierungsfaktor sowie durch Verwendung der erweiterten Auffächerung

So testen Sie die Einstellungen für den Parallelisierungsfaktor

Sie können die Stream-Verarbeitung verbessern, indem Sie den Parallelisierungsfaktor Ihrer Funktion so konfigurieren, dass sich die Anzahl gleichzeitiger Lambda-Aufrufe für jeden Shard eines Streams erhöht. Dies erfolgt durch Angabe der Anzahl gleichzeitiger Batches, die Lambda von jedem Shard abfragt. Dies wird in der Konfiguration der Ereignisquelle konfiguriert.

Wenn Ihr Parallelisierungsfaktor auf 10 eingestellt ist, können Sie bis zu 50 gleichzeitige Lambda-Aufrufe durchführen, um fünf Kinesis-Daten-Shards zu verarbeiten.

Beispiel: Gleichzeitige Ausführungen = Anzahl von Shards x gleichzeitige Batches pro Shard (Parallelisierungsfaktor).

Weitere Informationen finden Sie unter Verwenden von AWS Lambda mit Amazon Kinesis und Neue AWS Lambda-Skalierungskontrollen für Kinesis- und Amazon DynamoDB-Ereignisquellen.

Hinweis: Wenn sich die Anzahl gleichzeitiger Batches pro Shard erhöht, gewährleistet Lambda die Verarbeitung in der korrekten Reihenfolge auf Partitionsschlüsselebene.

So verwenden Sie die erweiterte Auffächerung

Sie können die Latenz verringern und den Lesedurchsatz erhöhen, indem Sie einen Datenstrom-Consumer mit erweiterter Auffächerung erstellen. Stream-Consumer erhalten eine dedizierte Verbindung mit jedem Shard. Diese Verbindung hat keine Auswirkungen auf andere Anwendungen, die ebenfalls aus dem Stream lesen.

Weitere Informationen finden Sie unter Developing Custom Consumers with Dedicated Throughput (Enhanced Fan-Out) (Entwickeln benutzerdefinierter Consumer mit dediziertem Durchsatz (erweiterte Auffächerung)) sowie unter Verwenden von AWS Lambda mit Amazon Kinesis.

Hinweis: Die erweiterte Auffächerung empfiehlt sich, wenn Sie über viele Anwendungen verfügen, die die gleichen Daten lesen, oder wenn Sie Streams mit großen Datensätzen erneut verarbeiten.

Ähnliche Informationen

Bewährte Methoden für die Arbeit mit AWS Lambda-Funktionen

Lambda-Ereignisquellenzuweisung

Skalierung einer Lambda-Funktion

Resharding, Skalierung und Parallelverarbeitung

Konfigurieren Ihres Daten-Streams und Ihrer Funktion

AWS OFFICIAL
AWS OFFICIALAktualisiert vor einem Jahr