DynamoDB Streams: TrimmedDataAccessException

TL;DR — DynamoDB Streams menyimpan rekaman selama 24 jam; rekaman lebih tua dipangkas dan hilang dari stream. Exception ini berarti Anda meminta posisi yang telah dipangkas — checkpoint lebih dari sehari, biasanya dari konsumen yang mati atau tertinggal. Anda tidak dapat mengembalikan rekaman itu dari stream: lanjutkan dari TRIM_HORIZON (rekaman tertua yang bertahan) dan rekonsiliasi celahnya dari tabel itu sendiri.

Apa artinya

TrimmedDataAccessException: The data you are trying to access has been trimmed.

Berbeda dengan iterator kedaluwarsa — di mana hanya handle posisi Anda yang usang — data yang dipangkas benar-benar dihapus. Meminta shard iterator pada SequenceNumber yang dipangkas, atau membaca shard yang rekamannya telah menua keluar, melempar ini. Stream adalah buffer 24-jam bergulir, bukan arsip.

Mengapa terjadi

  • Konsumen mati lebih dari 24 jam — pemadaman, worker yang dijeda, trigger yang dinonaktifkan terlupakan — dan checkpoint-nya sekarang menunjuk ke wilayah yang dipangkas.
  • Keterlambatan pemrosesan melebihi retensi — konsumen berjalan, tetapi lebih lambat dari laju tulis, dan menyimpang lebih dari sehari.
  • Checkpoint tersimpan usang — memulai ulang konsumen lama dengan SequenceNumber yang dipersist minggu lalu.
  • Membaca shard lama dari ujung ke ujung — menelusuri garis keturunan shard dari stream berumur panjang dan meminta rentang yang mendahului retensi.

Cara memperbaikinya

  1. Lanjutkan dari rekaman tertua yang tersedia dan terima celahnya:

    const {ShardIterator} = await streams.send(
      new GetShardIteratorCommand({
        StreamArn: streamArn,
        ShardId: shardId,
        ShardIteratorType: 'TRIM_HORIZON' // oldest untrimmed record
      })
    );

    Gunakan LATEST sebagai gantinya jika hanya aktivitas baru yang penting.

  2. Rekonsiliasi jendela yang terlewat dari sumber kebenaran — tabel masih punya keadaan saat ini dari setiap item. Scan/Query terbatas atas kunci yang terkena (atau ekspor untuk tabel besar) membangun kembali apa yang akan diberitahukan rekaman yang dipangkas, dikurangi versi perantara.

  3. Beri peringatan pada keterlambatan konsumen — pantau usia rekaman yang Anda proses (atau metrik IteratorAge Lambda) dan panggil jauh sebelum mendekati 24 jam.

  4. Butuh retensi lebih lama? Streaming ke buffer tahan lama saat rekaman tiba (mis. Kinesis Data Streams via pola Kinesis adapter, atau persist rekaman yang diproses sendiri) — DynamoDB Streams sendiri tidak dapat diperpanjang melewati 24 jam.

Membangun kembali keadaan setelah celah berarti melihat apa yang sebenarnya ada di tabel sekarang — aplikasi desktop DynoTable membuat lintasan rekonsiliasi itu menjadi kueri yang dapat dijelajahi alih-alih skrip. Mengukur baca catch-up? Kalkulator harga DynamoDB memperkirakan biaya RCU.

Kesalahan terkait

References

Terakhir diverifikasi 2026-07-13 terhadap dokumentasi resmi AWS yang ditautkan di atas.

Bekerja dengan DynamoDB tanpa Console

DynoTable adalah klien desktop yang cepat untuk DynamoDB — jelajahi tabel, jalankan query gaya SQL, dan edit Item secara lokal.