Wie behebe ich Probleme mit DynamoDB Streams in meinen Lambda-Funktionen?

Lesedauer: 4 Minute
0

Ich möchte Amazon DynamoDB Streams mit meinen AWS Lambda-Funktionen verwenden oder Fehler hierbei beheben.

Lösung

Im Folgenden finden Sie häufig gestellte Fragen zur Verwendung von DynamoDB Streams mit einer Lambda-Funktion:

Warum skaliert meine Lambda-Funktion nicht, wenn der DynamoDB-Stream ein Trigger ist?

Wenn Sie einen DynamoDB-Stream in einer DynamoDB-Tabelle aktivieren, ordnet Amazon DynamoDB jeder Partition einen Shard zu. Wenn Ihre DynamoDB-Tabelle beispielsweise 10 Partitionen hat und Sie DynamoDB-Streams für diese Tabelle aktivieren, erhalten Sie 10 Shards.

Wenn die Anzahl der Partitionen in Ihrer Tabelle zunimmt, steigt auch die Anzahl der Shards im Stream.

Jede Partition in einer DynamoDB-Tabelle kann bis zu 3000 Lesekapazitätseinheiten (RCUs), 1000 Schreibkapazitätseinheiten (WCUs) und 10 GB Daten verarbeiten. Das Überschreiten eines dieser Parameter hat Folgendes zur Folge:

  • Das Hinzufügen einer neuen Partition zur Tabelle.
  • Die Erstellung eines neuen Shards im DynamoDB-Stream.

Wie kann ich die Datenverarbeitung vom DynamoDB-Stream aus steuern?

Die Batchgröße und das Batchfenster helfen dabei, die Datenverarbeitung vom Stream aus zu steuern.

Batch-Fenster: Legt fest, wie lange auf Datensätze gewartet werden soll, bevor sie aufgerufen werden. Das Batchfenster ermöglicht die Steuerung der Datenverarbeitung aus dem DynamoDB-Stream. Beachten Sie, dass dieses Verhalten von der Datenverfügbarkeit innerhalb des Streams abhängt.

Batch-Größe: Legt die maximale Anzahl an Datensätzen im Batch fest.

Die Lambda-Funktion wird erst aufgerufen, wenn die folgenden Bedingungen erfüllt sind:

  • Die Nutzdatengröße erreicht 6 MB (Limit für synchrone Aufrufe).
  • Das Batch-Fenster erreicht seinen Maximalwert (in diesem Beispiel 60 Sekunden).
  • Die Batch-Größe erreicht ihren Maximalwert.

Wie wird der Parallelisierungsfaktor verwendet, um die Datenverarbeitung zu beschleunigen?

Der Parallelisierungsfaktor verarbeitet große Mengen von Datensätzen schnell, indem mehr gleichzeitige Ausführungen ermöglicht werden. Sie können den Parallelisierungsfaktor festlegen (Standardeinstellung: 1 bis 10), um die Anzahl der verarbeiteten Shards zu erhöhen. Wenn Sie den Parallelisierungsfaktor aktivieren, stellen Sie sicher, dass Sie zufällige oder eindeutige Partitionsschlüssel verwenden, um den höchsten Durchsatz zu erzielen.

Berechnung: Parallelisierungsfaktor (gleichzeitige Batches pro Shard) * Shards = Gleichzeitige Ausführung

Was ist die BisectBatchonFunctionError-Einstellung?

Wenn die Lambda-Funktion fehlschlägt, werden die Batches in zwei Teile aufgeteilt, wenn die Option BisectBatchonFunctionError auf true gesetzt ist. Die aufgeteilten Batches werden dann wiederholt, bis der Problemdatensatz gefunden wurde. Wiederholungen werden auf der Grundlage der Einstellungen für maximale Wiederholungsversuche und das Datensatzalter verarbeitet.

Wenn die Option Wiederholungsversuche auf 0 gesetzt ist, werden für den fehlgeschlagenen Datensatz keine Wiederholungsversuche unternommen. In diesem Fall verwirft der DynamoDB-Stream fehlerhafte Datensätze oder sendet sie an die Warteschlange für unzustellbare Nachrichten (DLQ), sofern konfiguriert.

Beispiel 1

Im folgenden Beispiel steht 'p' für den Problemdatensatz und die Wiederholungsversuche sind auf 0 gesetzt.

Batch-Datensatz: [1,2,3p,4,5p]

Split 1: [3p,4,5p]

Split 2: [3p] [4,5p] Beim erneuten Versuch wird [3p] verworfen, da er als Problemdatensatz identifiziert wurde. Alternativ wird er an die DLQ gesendet, sofern konfiguriert.

Split 3: [4] wird verarbeitet. [5p] wird verworfen oder an die DLQ gesendet, sofern konfiguriert.

Beispiel 2

Im folgenden Beispiel steht 'x' für den Problemdatensatz. Wiederholungsversuche sind auf -1 gesetzt.

Eingefügte Batch-Datensätze: [1,2,3x,4,5x]

[3x,4,5x]

[3x,4,5x]

[3x,4,5x]

[3x,4,5x]

Warum erhöht sich IteratorAge in Lambda für meinen DynamoDB-Stream?

Im Folgenden sind die häufigsten Gründe für einen Anstieg des IteratorAge in Lambda aufgeführt:

  • Der DynamoDB-Stream enthält einen fehlerhaften Datensatz.
  • Es liegt eine große Anzahl von Schreibvorgängen (PutItem zu BatchWriteItem) für den Stream vor. Die Lambda-Funktion ist möglicherweise nicht in der Lage, mit der Verarbeitung eines hohen Schreibvolumens Schritt zu halten. Wenn dies der Fall ist, erhöhen Sie die bereitgestellte Kapazität der DynamoDB-Tabelle, um die Anzahl der Partitionen pro 1000 WCUs zu erhöhen. Eine Erhöhung der bereitgestellten Kapazität erhöht die Anzahl gleichzeitiger Lambda-Ausführungen. Weitere Informationen finden Sie im vorherigen Abschnitt Warum skaliert meine Lambda-Funktion nicht, wenn der DynamoDB-Stream ein Trigger ist?
  • Die Anzahl der DynamoDB-Partitionen ist gesunken, z. B. bei der Migration zu einem neuen Konto oder zu einer neuen Tabelle.
  • In der Lambda-Funktion liegen Drosselungen oder Funktionsfehler vor. AWS Lambda wiederholt Datensätze, bis der gesamte Stapel erfolgreich verarbeitet wurde oder das Alter des Datensatzes abgelaufen ist. Außerdem beträgt die Aufbewahrungsdauer von DynamoDB Streams 24 Stunden. Um Datenverlust zu vermeiden, empfiehlt es sich, die DLQ einzurichten. Wenn die DLQ konfiguriert ist, sendet AWS Lambda fehlerhafte Datensatz-Batches an die DLQ, nachdem Außerbetriebnahmen abgeschlossen wurden oder das Datensatzalter abgelaufen ist.
    Um Lambda-Funktionsfehler zu beheben, suchen Sie in den Amazon CloudWatch Logs nach Einzelheiten zu dem Fehler.
  • Die Dauer der Lambda-Funktion erhöht sich.
  • Sie müssen die Fehlerbehandlung und den Parallelisierungsfaktor optimieren.

Detaillierte Informationen finden Sie unter Warum steigt meine Lambda-IteratorAge-Metrik und wie verringere ich sie?

AWS OFFICIAL
AWS OFFICIALAktualisiert vor einem Jahr