【问题标题】:Amazon Kinesis Firehose to S3 with Protobuf data带有 Protobuf 数据的 Amazon Kinesis Firehose 到 S3
【发布时间】:2018-04-02 18:15:47
【问题描述】:

有没有人尝试通过 Kinesis Firehose 推送 Google Protobuf (PB) 数据以存储到 S3。我问这个问题是因为 Protobuf(通常)是一种二进制格式,而且我记得(可能是错误的)Firehose 在写入之前通过 base64 转换运行所有数据。稍后我需要读取 PB 数据进行处理,并想知道我是否需要在使用前对其进行 de-base64 处理,或者我是否可以直接从 S3 访问原始 PB 数据。谢谢。

【问题讨论】:

  • 这是一个有趣的问题。但是,我需要问为什么? Google PB 是一种序列化的数据格式。这意味着您正在获取结构化数据,更改其格式,然后将其发送到 Kineses Firehose。然后您必须反序列化数据,这可能意味着重新创建 Google 库。为什么不直接将数据发送到 Kinesis?
  • 其实,这正是我想做的:将PB直接写入S3。我使用 FH 作为缓冲区来聚合一段时间内的文件写入次数。但是,根据我的阅读,FH 不会获取原始二进制数据,而是会在传输过程中转换为 base64。我对此有误吗?我很想直接向 FH 写入一个 PB 字节 [],然后稍后直接从​​ S3 读取它。
  • 引用说BLOB在序列化时是base64编码的。
  • 您最终是否使用 protobufs 和 firehose 做到了这一点?

标签: amazon-web-services amazon-s3 protocol-buffers amazon-kinesis-firehose


【解决方案1】:

您可以使用 Lambda 将二进制数据直接写入 S3。不过,您需要能够从 lambda 的源中提取文件,因为我相信 API Gateway 将对二进制有效负载进行 Base64 编码。

【讨论】:

    【解决方案2】:

    您可以将二进制数据传递给 Kineses Firehose,Kinesis 会对数据进行 base64 编码,然后再发送到另一个 AWS 服务。查看Java文档中的setData()函数:

    Kinesis Firehose Record

    然后,您需要在从 S3 读取数据后对数据进行解码以进行进一步处理。

    【讨论】:

    • 那么,如果 Kineses Firehose 要求二进制数据以 base64 编码写入,还有其他方法可以将未编码的二进制数据放入 S3 吗?或者,我开始认为我们需要实现自己的 AMPQ 或 Kafka 服务来处理数据聚合,然后将二进制文件直接复制到 S3 ..
    • 感谢您的帮助。它告诉我的是,firehose 不是二进制日志文件的解决方案!
    猜你喜欢
    • 2016-02-03
    • 2016-03-31
    • 2020-07-26
    • 2020-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-07
    • 1970-01-01
    相关资源
    最近更新 更多