DynamoDB Flussi: TrimmedDataAccessException
TL;DR — DynamoDB I flussi conservano i record per 24 ore; i record più vecchi vengono tagliati e rimossi dallo stream. Questa eccezione significa che hai richiesto una posizione che è stata ridotta: un checkpoint vecchio di più di un giorno, di solito da un consumatore che era in ribasso o rimasto indietro. Non puoi recuperare quei record dallo stream: riprendi da "TRIM_HORIZON" (il record più vecchio sopravvissuto) e riconcilia il divario dalla tabella stessa.
Cosa significa
TrimmedDataAccessException: The data you are trying to access has been trimmed.A differenza di un iteratore scaduto — dove solo il tuo handle di posizione è diventato obsoleto — i dati tagliati vengono effettivamente rimossi. La richiesta di un iteratore di shard in un "SequenceNumber" ridotto o la lettura di uno shard i cui record sono scaduti genera questo problema. Lo streaming è un buffer continuo di 24 ore, non un archivio.
Perché succede
- Il consumatore è rimasto inattivo per più di 24 ore (un'interruzione, un lavoratore in pausa, un trigger disabilitato dimenticato) e il suo checkpoint ora punta in un territorio tagliato.
- Il ritardo di elaborazione ha superato la conservazione: il consumer funziona, ma più lentamente della velocità di scrittura e resta indietro di oltre un giorno.
- Un checkpoint memorizzato non aggiornato: il riavvio di un vecchio consumer con un
SequenceNumberpersisteva settimane fa. - Lettura end-to-end di un vecchio shard: percorre la linea di shard di un flusso di lunga durata e richiede intervalli che precedono la conservazione.
Come risolverlo
Riprendi dal record disponibile più vecchio e accetta l'intervallo:
const {ShardIterator} = await streams.send( new GetShardIteratorCommand({ StreamArn: streamArn, ShardId: shardId, ShardIteratorType: 'TRIM_HORIZON' // oldest untrimmed record }) );Utilizza invece "LATEST" se conta solo la nuova attività.
Riconcilia la finestra mancata dalla fonte della verità: la tabella ha ancora lo stato corrente di ogni elemento. Uno
Scan/Querylimitato sulle chiavi interessate (o un export per tabelle di grandi dimensioni) ricostruisce ciò che i record tagliati ti avrebbero detto, meno le versioni intermedie.Avviso sul ritardo del consumatore: monitora l'età dei record che stai elaborando (o la metrica "IteratorAge" di Lambda) e pagina molto prima che si avvicini alle 24 ore.
Hai bisogno di una conservazione più lunga? Esegui lo streaming in un buffer durevole all'arrivo dei record (ad esempio Kinesis Data Streams tramite modelli di adattatori Kinesis o permetti tu stesso i record elaborati) — DynamoDB I flussi stessi non possono essere estesi oltre le 24 ore.
Reimpostare il checkpoint dopo il ripristino. Mantenere il nuovo
SequenceNumberdaTRIM_HORIZONin modo che il consumer non riprenda la vecchia posizione ritagliata al riavvio.
In DynoTable
Dopo un intervallo di rifinitura, riconcilia lo stato corrente dell'articolo dalla tabella: aprila con ⌘K e sfoglia o filtra le chiavi mancate al consumatore. DynoTable mostra i dati della tabella in tempo reale indipendentemente dalla finestra del flusso di 24 ore.
Dimensiona la lettura di recupero con il calcolatore dei prezzi. Copia "LatestStreamArn" della tabella dal pannello dei metadati prima di riavviare il consumer. Cambia profilo con ⌘P; vedere Connetti a AWS e Installa.
Fonti
- GetRecords - Amazon DynamoDB Streams API Riferimento (verificato il 13-07-2026)
- Modifica l'acquisizione dei dati per DynamoDB Streams (verificato il 13-07-2026)
Errori correlati
- ExpiredIteratorException — il cugino recuperabile: posizione obsoleta, dati ancora presenti.
- Stream non abilitato
- StreamArn non valido
- Impara: DynamoDB Streams
Riferimenti
- GetRecords - Amazon DynamoDB Streams API Riferimento
- GetShardIterator — Riferimento Amazon DynamoDB Streams API
- Modifica dell'acquisizione dati per DynamoDB Streams - Guida per sviluppatori di Amazon DynamoDB
Ultima verifica il 13-07-2026 rispetto alla documentazione ufficiale del AWS collegata sopra.