View a markdown version of this page

在 Amazon Keyspaces 中访问 CDC 流中的记录 - Amazon Keyspaces(Apache Cassandra 兼容)

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

在 Amazon Keyspaces 中访问 CDC 流中的记录

要访问流中的记录,您可以使用亚马逊密钥空间流 API 。下一节包含有关如何使用访问记录的示例 AWS CLI。

有关所需的权限,请参阅配置权限以在 Amazon Keyspaces 中使用 CDC 流

使用访问流中的记录 AWS CLI
  1. 您可以使用 Amazon Keyspaces Streams API 来访问该流的变更记录。有关更多信息,请参阅 Amazon Keyspaces Streams API 参考。要检索流中的分片,您可以使用如下示例所示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>" }, ] }
  2. 要从流中检索记录,首先要获得一个迭代器,它可以为你提供访问记录的起点。为此,您可以使用上一步中 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>" }
  3. 要使用 get-records API 检索 CDC 记录,可以使用最后一步中返回的迭代器。下面是一个命令示例。

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

    下面是输出的一个示例。

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

使用迭代器位置优化轮询频率

GetRecords响应中包含一个iteratorDescription字段,该字段表示您的消费者在分片中的当前位置:

  • AT_TIP— 目前没有更多可用的记录。考虑降低投票频率以优化成本。

  • BEHIND_TIP— 直播提示不断向前移动。可能还有其他记录。继续以正常频率进行投票。

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