View a markdown version of this page

使用 DynamoDB Streams Kinesis 轉接器從時間戳記讀取記錄 - Amazon DynamoDB

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

使用 DynamoDB Streams Kinesis 轉接器從時間戳記讀取記錄

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

先決條件

若要從特定時間點讀取 DynamoDB Streams 記錄,請確定您的應用程式使用下列項目:

  • DynamoDB Streams Kinesis Adapter 2.5.0 版或更新版本。

  • 現有轉接器應用程式所需的相同 AWS Identity and Access Management(IAM) 許可。此功能不需要額外的 API 許可。

如需轉接器設定的詳細資訊,請參閱 使用 DynamoDB Streams Kinesis 轉接器處理串流記錄。

設定開始時間戳記

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

  2. 將其傳遞至 StreamsSchedulerFactory.createSingleStreamTracker。

  3. 將傳回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位於或晚於指定的時間戳記。

時間戳記案例

時間戳記早於保留的串流記錄

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

時間戳記是未來的

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

使用現有的租用資料表變更時間戳記或初始位置

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

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

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

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

定價

從超過標準費用的時間戳記讀取串流記錄不會產生額外費用GetRecords。如需詳細資訊,請參閱 DynamoDB 定價。

另請參閱