

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 在 Amazon Keyspaces 中访问 CDC 流中的记录
<a name="keyspaces-records-cdc"></a>

要访问流中的记录，您可以使用[亚马逊密钥空间流 API ](https://docs.aws.amazon.com/keyspaces/latest/StreamsAPIReference/Welcome.html)。下一节包含有关如何使用访问记录的示例 AWS CLI。

有关所需的权限，请参阅[配置权限以在 Amazon Keyspaces 中使用 CDC 流](configure-cdc-permissions.md)。

**使用访问流中的记录 AWS CLI**

1. 您可以使用 Amazon Keyspaces Streams API 来访问该流的变更记录。有关更多信息，请参阅 [* Amazon Keyspaces Streams API 参考*](https://docs.aws.amazon.com/keyspaces/latest/StreamsAPIReference/Welcome.html)。要检索流中的分片，您可以使用如下示例所示`get-stream`的 API。

   ```
   aws keyspacesstreams get-stream \
   --stream-arn 'arn:aws:cassandra:{{us-east-1}}:{{111122223333}}:/keyspace/mykeyspace/table/mytable/stream/{{STREAM_LABEL}}'
   ```

   下面是输出的一个示例。

   ```
   {
      "StreamArn": "arn:aws:cassandra:us-east-1:111122223333:/keyspace/mykeyspace/table/mytable/stream/2023-05-11T21:21:33.291",
      "StreamStatus": "ENABLED",
      "StreamViewType": "NEW_AND_OLD_IMAGES",
      "CreationRequestDateTime": "<CREATION_TIME>",
      "KeyspaceName": "mykeyspace",
      "TableName": "mytable",
      "StreamLabel": "2023-05-11T21:21:33.291",
       "Shards": [
           {
               "SequenceNumberRange": {
                   "EndingSequenceNumber": "<END_SEQUENCE_NUMBER>",
                   "StartingSequenceNumber": "<START_SEQUENCE_NUMBER>"
               },
               "ShardId": "<SHARD_ID>"
           },
       ]
   }
   ```

1. 要从流中检索记录，首先要获得一个迭代器，它可以为你提供访问记录的起点。为此，您可以使用上一步中 API 返回的 CDC 流中的分片。要收集迭代器，可以使用 `get-shard-iterator` API。在本示例中，您使用类型为的迭代器`TRIM_HORIZON`，该迭代器从分片的最后一个修剪点（或起点）进行检索。

   ```
   aws keyspacesstreams get-shard-iterator \
   --stream-arn 'arn:aws:cassandra:{{us-east-1}}:{{111122223333}}:/keyspace/mykeyspace/table/mytable/stream/{{STREAM_LABEL}}' \
   --shard-id '{{SHARD_ID}}' \
   --shard-iterator-type 'TRIM_HORIZON'
   ```

   该命令的输出如下例所示。

   ```
   {
       "ShardIterator": "<SHARD_ITERATOR>" 
   }
   ```

1. 要使用 `get-records` API 检索 CDC 记录，可以使用最后一步中返回的迭代器。下面是一个命令示例。

   ```
   aws keyspacesstreams get-records \
   --shard-iterator '{{SHARD_ITERATOR}}' \
   --limit 100
   ```

   下面是输出的一个示例。

   ```
   {
       "changeRecords": [...],
       "nextShardIterator": "<NEXT_SHARD_ITERATOR>",
       "iteratorDescription": {
           "iteratorPosition": "BEHIND_TIP"
       }
   }
   ```

## 使用迭代器位置优化轮询频率
<a name="keyspaces-cdc-polling-guidance"></a>

`GetRecords`响应中包含一个`iteratorDescription`字段，该字段表示您的消费者在分片中的当前位置：
+ `AT_TIP`— 目前没有更多可用的记录。考虑降低投票频率以优化成本。
+ `BEHIND_TIP`— 直播提示不断向前移动。可能还有其他记录。继续以正常频率进行投票。

`BEHIND_TIP`如果`changeRecords`列表为空，则表示直播正在进行中，但此位置没有客户记录。继续正常投票。