首页 > 解决方案 > Amazon Kinesis 1 MB 大小限制解决方法

问题描述

AWS 文档中所述

在 base64 编码之前,记录的数据负载的最大大小为 1 MiB。

因为我需要处理大小可能大于 1 MB 的记录,所以这个限制可能是个问题。

是否有任何解决方法可以克服此限制?如果任何人已经实施和使用了任何经过验证的解决方案?(我想避免“重新发明轮子”)

标签: amazon-web-servicesamazon-kinesis

解决方案


您有两个选择:将有效负载分成多条记录或将其保存在流之外,例如在 S3 中。

对于第一个选项,您可以使用PartitionKeyand SequenceNumberForOrdering( doc )。为每个源记录分配一个唯一的分区键(例如 UUID)。如果您需要将源分成 1MB 以下的块,请将块 2..N 的序列号设置为前一个块的返回序列号。

然后,这将要求客户端检查检索记录的分区键,并在必要时重建原始记录。请注意,它们可能需要缓冲几个块(用于不同的源记录)。

外部化数据将简化生产者和消费者代码。同样,为每个源记录创建一个唯一标识符,但不是将记录写入流,而是使用该标识符作为其键将其写入 S3。然后将密钥写入流。然后,消费者在从流中读取 ID 时,将从 S3 中检索实际数据。

第二种方法确实需要更多管理:您需要向 S3 添加生命周期规则以删除记录,并且您需要确保此生命周期规则让对象至少与流的保留期一样长(不管流保留期如何,我可能会设置 8 天的 TTL,因为 S3 很便宜)。

如果您只有很少的大记录,特别是如果您有很多小记录,那么将所有内容都写入 S3 将是低效的。在这种情况下,您可以采用混合模型,在该模型中,您将数据结构写入包含实际数据或对外部存储的引用的流中。


推荐阅读