如何处理串联的 Avro 文件?

How to deal with concatenated Avro files?

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

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

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

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

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