本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用 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 轉接器處理串流記錄。
設定開始時間戳記
-
建立具有所需時間戳記的
InitialPositionInStreamExtended執行個體。 -
將其傳遞至
StreamsSchedulerFactory.createSingleStreamTracker。 -
將傳回
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和 之間的時間戳記或切換。將序號儲存為租用資料表中檢查點的碎片會從這些檢查點繼續。尚未啟動的碎片可以使用新組態,如果與現有租用不相容,則會失敗。因此,應用程式可以處理不同開始位置的不同碎片。
若要安全地套用變更,請停止現有的應用程式,然後選擇下列其中一種方法:
-
刪除租用資料表並重新啟動應用程式 (建議):停止每個工作者、刪除現有的租用資料表、更新組態,然後重新啟動應用程式。
-
使用新的應用程式名稱:轉接器會建立新的租用資料表,並在應用程式啟動時套用新的時間戳記或初始位置。根據預設,除非明確覆寫,否則 KCL 會使用應用程式名稱做為租用資料表的名稱。如果您需要轉返,現有的租用資料表仍然可用。
定價
從超過標準費用的時間戳記讀取串流記錄不會產生額外費用GetRecords。如需詳細資訊,請參閱 DynamoDB 定價