【问题标题】:Partitioning AWS Kinesis Firehose data to s3 by payload [duplicate]通过有效负载将 AWS Kinesis Firehose 数据分区到 s3 [重复]
【发布时间】:2018-01-07 23:49:19
【问题描述】:

我正在使用 AWS-Kinesis-Firehose 将数据注入 S3,然后与 Athena 一起使用。

我正在尝试分析来自不同游戏的事件,以避免 Athena 探索太多数据我想使用每个游戏的标识符来分区 s3 数据,到目前为止我没有找到解决方案,因为 Firehose 接收来自不同游戏的数据.

有人知道怎么做吗?

谢谢你, 哈维。

【问题讨论】:

  • 最好添加你目前的代码
  • 为什么这个问题被标记为重复?这是一个有效且非常不同的问题。将其标记为重复是错误的。这个问题询问如何根据运动流的值创建自定义分区。应该是关于镶木地板文件的重复讨论的问题,两者是完全不同的。 Kinesis 也可以在没有转换的情况下工作。请删除重复标记。

标签: amazon-web-services amazon-s3 partitioning payload amazon-kinesis-firehose


【解决方案1】:

您可以使用Amazon Kinesis Analytics 根据某些逻辑(例如游戏 ID)将传入的 Firehose 流拆分为单独的输出流。

它可以接受KinesisFirehoseInput并将数据发送到KinesisFirehoseOutput

但是,limits documentation 似乎表明每个应用程序只能有 3 个输出目标,因此这还不够。

【讨论】:

    【解决方案2】:

    您可以将流量发送到主 FireHose 流 - 然后使用 lambda 函数将数据拆分为多个 FireHose 流 - 每个游戏一个,将数据保存在单独的文件夹/存储桶中

    【讨论】:

    • 我想过这个,但是有一个问题,我预计每天有大约 2000 万个事件,这意味着 lambda 函数每天会被触发 20M 次,只是为了“分类”事件,那会很贵。
    • 我找到了 cloudWatch 事件,这可以帮助我在一段时间内完成它,但仍然可能很昂贵
    • Lambda 可以通过 FireHose 批量触发多达 1000 个事件 - 这将大大减少您的触发器
    • 我已经按照你之前说的做了,通过将 lambda 函数分配给 firehose 流,因为我已经配置了 300 秒的批处理时间,足以满足我的需求。 Batch on events 对我无效,因为我可以在短时间内或几个时间内收到很多事件,我不想等到收到 1000 个事件。非常感谢您的帮助!!
    • 请注意,批处理设置为“最多 X 个事件”,在达到限制之前不会保留您的流
    猜你喜欢
    • 2019-09-29
    • 2017-10-16
    • 2018-04-02
    • 2021-05-11
    • 2020-02-08
    • 2016-11-13
    • 2020-12-29
    • 2017-07-20
    • 2018-01-07
    相关资源
    最近更新 更多