我的运动数据和 s3 数据不匹配。为什么是这样?

Mismatch between my kinesis data and s3 data. Why is this?

运动记录时的数据:

aws kinesis get-shard-iterator --shard-id shardId-000000000000 --shard-iterator-type TRIM_HORIZON --stream-name <kinesis_stream> --profile sandbox
aws kinesis get-records --shard-iterator <some long iterator> --profile sandbox

看起来像这样:

{
            "SequenceNumber": "49597879057469488670276149632780729413492497034093002754",
            "ApproximateArrivalTimestamp": 1563920035.139,
            "Data": "<some very long data encoded/encrypted/",
            "PartitionKey": "84b15621-f823-43f6-acc7-069a2acfdea1"
        }

这个 kinesis 链接到一个 kinesis firehouse,它链接到 s3 但我的桶对象看起来像这样:

{"type":"DatabaseActivityMonitoringRecords","version":"1.0","databaseActivityEvents":"<some long event encrypted/encoded>"}

为什么会出现这种不匹配?从 kinesis 到 s3 的转变发生在哪里?什么是 get-records 实际上让我?运动数据代表什么?我的 s3 事件代表什么?

对于上下文,我使用的是极光数据库,数据库 activity 流连接到 kinesis -> kinesis firehouse -> s3。

请看我在这里发布的答案:

这2个问题很相似。

为什么会出现这种不匹配?

  • Kinesis 流中的所有数据均采用 base64 编码。因此,根据您用来查看它的客户端,您可能会看到编码或解码版本。 IE。节点库将为您解码。 AWS CLI 不解码消息

从 kinesis 到 s3 的转换发生在哪里?

  • 内部 AWS 事件处理程序将在将其存储到 S3 之前执行解码。你看不到它,但本质上它只是一个 lambda 为你从 Kinesis -> S3 移动数据。

get-records 到底给我带来了什么?

  • 它为您提供了您的数据,以及关于 "where" 它位于 Kinesis 流中的信息。

运动数据代表什么? 我的 s3 事件代表什么?

  • 它们都应该代表您的数据。 Kinesis 响应附带额外的装饰,以识别它在流中的位置,以便您稍后可以返回并找到它。 S3 存储原始解码数据