5

我正在以 Apache Avro 格式存储从我的 Web 应用程序生成的数据。数据经过编码并发送到 Apache Kinesis Firehose,该 Firehose 每隔 300 秒左右缓冲一次数据并将数据写入 Amazon S3。由于我有多个 Web 服务器,这会导致将多个 Avro 文件 blob 发送到 Kinesis,然后将它们连接起来并定期将它们写入 S3。

当我从 S3 获取文件时,我无法使用普通的 Avro 工具对其进行解码,因为它实际上是多个文件合二为一。我想我可以添加一个分隔符,但如果记录的数据也具有相同的分隔符,这似乎有风险。

处理这个问题的最佳方法是什么?我在标准中找不到任何支持将多个 Avro 文件连接到同一个文件中的内容。

4

1 回答 1

3

看起来目前 firehose 不提供任何支持来处理您的用例,但它可以通过常规 kinesis 流实现。

您可以将数据发送到 kinesis 流,而不是发送到 firehose,而是定义自己的 AWS Lambda 函数(带有 kinesis 事件源),该函数从流中读取数据并将其作为 Avro 文件写入 S3,在这里您不会面对 firehose 的问题,因为您已经知道它是 avro 格式(并且您可能拥有架构),因此您可以正确解码/编码它(并立即将文件写入 S3)

于 2016-01-16T20:39:12.493 回答