

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Utilizzo dell'adattatore Kinesis DynamoDB Streams per leggere i record da un timestamp
<a name="Streams.Timestamp"></a>

Con l'elaborazione dello stream basata su timestamp, puoi iniziare a leggere i record di DynamoDB Streams da un momento specifico. Questa guida spiega come configurare la funzionalità con l'adattatore Kinesis DynamoDB Streams e come si comporta in diversi scenari.

## Prerequisiti
<a name="Streams.Timestamp.Prerequisites"></a>

Per leggere i record di DynamoDB Streams da un momento specifico, assicurati che l'applicazione utilizzi quanto segue:
+ DynamoDB Streams Kinesis Adapter versione 2.5.0 o successiva.
+ Lo stesso *AWS Identity and Access Management* autorizzazioni (IAM) richieste da un'applicazione adattatore esistente. Questa funzionalità non richiede autorizzazioni API aggiuntive.

Per ulteriori informazioni sulla configurazione dell'adattatore, vedere [Utilizzo dell'adattatore DynamoDB Streams Kinesis per elaborare i record di flusso](Streams.KCLAdapter.md).

## Configura il timestamp iniziale
<a name="Streams.Timestamp.Configure"></a>

1. Crea un `InitialPositionInStreamExtended` istanza con il timestamp desiderato.

1. Passalo a `StreamsSchedulerFactory.createSingleStreamTracker`.

1. Aggiungi il restituito `StreamTracker` al `ConfigsBuilder` per l'applicazione Kinesis Client Library (KCL).

Il seguente esempio Java mostra come configurare il timestamp iniziale:

```
// Create the initial position with the desired timestamp
InitialPositionInStreamExtended initialPosition =
    InitialPositionInStreamExtended.newInitialPositionAtTimestamp(
        Date.from(Instant.ofEpochMilli(1790467200000L)));

// Create the stream tracker
StreamTracker streamTracker = StreamsSchedulerFactory.createSingleStreamTracker(
    streamArn,
    initialPosition);

// Register the stream tracker, so that the scheduler uses the configured timestamp to read shards
configsBuilder.streamTracker(streamTracker);
```

L'adattatore inizializza ogni nuovo contratto di locazione con `AT_TIMESTAMP` come posizione iniziale. Per ogni contratto di locazione, chiama `GetShardIterator` con il timestamp specificato per ottenere un iteratore. Quindi passa l'iteratore a `GetRecords`, che restituisce i record che iniziano con il primo record di cui `ApproximateCreationDateTime` è uguale o successivo al timestamp specificato.

## Scenari con timestamp
<a name="Streams.Timestamp.Scenarios"></a>

### Il timestamp è più vecchio dei record di streaming conservati
<a name="Streams.Timestamp.Scenarios.OlderThanRetention"></a>

L'applicazione inizia dal record più vecchio ancora disponibile in ogni frammento. Non restituisce un errore. Non è possibile recuperare i record che hanno superato la finestra di conservazione di 24 ore di DynamoDB Streams.

### Il timestamp è nel futuro
<a name="Streams.Timestamp.Scenarios.Future"></a>

L'adattatore convalida il timestamp durante l'inizializzazione. Se il timestamp è futuro, l'adattatore lo rifiuta senza effettuare alcuna chiamata API e l'elaborazione non può iniziare. Utilizza un timestamp uguale o precedente all'ora corrente. Tieni conto delle differenze di clock tra l'host dell'applicazione e il servizio quando scegli un timestamp vicino all'ora corrente.

## Modifica del timestamp o della posizione iniziale con una tabella di leasing esistente
<a name="Streams.Timestamp.ConfigChange"></a>

Non modificare il timestamp né passare da uno all'altro `AT_TIMESTAMP`, `TRIM_HORIZON`, e `LATEST` in un'applicazione in esecuzione il cui stato è memorizzato nella tabella di leasing. I frammenti che memorizzano i numeri di sequenza come checkpoint nella tabella di leasing continuano da quei checkpoint. Gli shard che non sono stati avviati possono utilizzare la nuova configurazione o fallire se è incompatibile con i leasing esistenti. L'applicazione può quindi elaborare diversi frammenti da diverse posizioni di partenza.

Per applicare entrambe le modifiche in modo sicuro, interrompi l'applicazione esistente e scegli uno dei seguenti approcci:

1. **Eliminare la tabella dei lease e riavviare l'applicazione (scelta consigliata)**: arresta tutti i lavoratori, elimina la tabella di leasing esistente, aggiorna la configurazione e quindi riavvia l'applicazione.

1. **Usa un nuovo nome per l'applicazione**: l'adattatore crea una nuova tabella di leasing e applica il nuovo timestamp o la nuova posizione iniziale all'avvio dell'applicazione. Per impostazione predefinita, KCL utilizza il nome dell'applicazione come nome della tabella di leasing a meno che non venga esplicitamente sovrascritto. La tabella di leasing esistente rimane disponibile se è necessario eseguire il rollback.

## Prezzi
<a name="Streams.Timestamp.Pricing"></a>

Non è previsto alcun costo aggiuntivo per la lettura dei record di streaming da un timestamp diverso da quello standard `GetRecords` addebiti. Per ulteriori informazioni, vedere [Prezzi di DynamoDB](https://aws.amazon.com/dynamodb/pricing/).

## Consulta anche
<a name="Streams.Timestamp.SeeAlso"></a>
+ [Utilizzo dell'adattatore DynamoDB Streams Kinesis per elaborare i record di flusso](Streams.KCLAdapter.md)
+ [Sviluppare i consumatori utilizzando la Kinesis Client Library](https://docs.aws.amazon.com/streams/latest/dev/kcl.html)
+ [DynamoDB Streams Kinesis Adapter su GitHub sito](https://github.com/awslabs/dynamodb-streams-kinesis-adapter)