

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 使用 DynamoDB Streams Kinesis 轉接器從時間戳記讀取記錄
<a name="Streams.Timestamp"></a>

透過以時間戳記為基礎的串流處理，您可以開始從特定時間點讀取 DynamoDB Streams 記錄。本指南說明如何使用 DynamoDB Streams Kinesis Adapter 設定功能，以及它在不同案例中的行為。

## 先決條件
<a name="Streams.Timestamp.Prerequisites"></a>

若要從特定時間點讀取 DynamoDB Streams 記錄，請確定您的應用程式使用下列項目：
+ DynamoDB Streams Kinesis Adapter 2.5.0 版或更新版本。
+ 現有轉接器應用程式所需的相同 *AWS Identity and Access Management*(IAM) 許可。此功能不需要額外的 API 許可。

如需轉接器設定的詳細資訊，請參閱 [使用 DynamoDB Streams Kinesis 轉接器處理串流記錄](Streams.KCLAdapter.md)。

## 設定開始時間戳記
<a name="Streams.Timestamp.Configure"></a>

1. 建立具有所需時間戳記的`InitialPositionInStreamExtended`執行個體。

1. 將其傳遞至 `StreamsSchedulerFactory.createSingleStreamTracker`。

1. 將傳回`ConfigsBuilder`的 `StreamTracker`新增至 Kinesis Client Library (KCL) 應用程式的 。

下列 Java 範例示範如何設定開始時間戳記：

```
// 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);
```

轉接器會將每個新租用初始化`AT_TIMESTAMP`為初始位置。對於每個租用，它會`GetShardIterator`使用指定的時間戳記呼叫 以取得迭代器。然後，它會將迭代器傳遞至 `GetRecords`，以第一個記錄開頭的記錄，其`ApproximateCreationDateTime`位於或晚於指定的時間戳記。

## 時間戳記案例
<a name="Streams.Timestamp.Scenarios"></a>

### 時間戳記早於保留的串流記錄
<a name="Streams.Timestamp.Scenarios.OlderThanRetention"></a>

應用程式從每個碎片中仍然可用的最舊記錄開始。它不會傳回錯誤。您無法復原已超過 DynamoDB Streams 24 小時保留時段的記錄。

### 時間戳記是未來的
<a name="Streams.Timestamp.Scenarios.Future"></a>

轉接器會在初始化期間驗證時間戳記。如果時間戳記是未來的，轉接器會拒絕它，而不進行任何 API 呼叫，且無法開始處理。在目前時間或之前使用時間戳記。選擇接近目前時間的時間戳記時，允許應用程式主機和服務之間的時鐘差異。

## 使用現有的租用資料表變更時間戳記或初始位置
<a name="Streams.Timestamp.ConfigChange"></a>

請勿在狀態存放在租用資料表的執行`LATEST`中應用程式中，變更 `TRIM_HORIZON`、 `AT_TIMESTAMP`和 之間的時間戳記或切換。將序號儲存為租用資料表中檢查點的碎片會從這些檢查點繼續。尚未啟動的碎片可以使用新組態，如果與現有租用不相容，則會失敗。因此，應用程式可以處理不同開始位置的不同碎片。

若要安全地套用變更，請停止現有的應用程式，然後選擇下列其中一種方法：

1. **刪除租用資料表並重新啟動應用程式 （建議）**：停止每個工作者、刪除現有的租用資料表、更新組態，然後重新啟動應用程式。

1. **使用新的應用程式名稱**：轉接器會建立新的租用資料表，並在應用程式啟動時套用新的時間戳記或初始位置。根據預設，除非明確覆寫，否則 KCL 會使用應用程式名稱做為租用資料表的名稱。如果您需要轉返，現有的租用資料表仍然可用。

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

從超過標準費用的時間戳記讀取串流記錄不會產生額外費用`GetRecords`。如需詳細資訊，請參閱 [DynamoDB 定價](https://aws.amazon.com/dynamodb/pricing/)。

## 另請參閱
<a name="Streams.Timestamp.SeeAlso"></a>
+ [使用 DynamoDB Streams Kinesis 轉接器處理串流記錄](Streams.KCLAdapter.md)
+ [使用 Kinesis Client Library 開發消費者](https://docs.aws.amazon.com/streams/latest/dev/kcl.html)
+ [GitHub 網站上的 DynamoDB Streams Kinesis 轉接器](https://github.com/awslabs/dynamodb-streams-kinesis-adapter)