【问题标题】:AWS Kinesis "DynamicPartitioning.ActivePartitionsLimitExceeded" ErrorAWS Kinesis“DynamicPartitioning.ActivePartitionsLimitExceeded”错误
【发布时间】:2022-07-23 20:19:34
【问题描述】:

解决方案概述

应用程序将事件发布到 SNS 主题,Kinesis 传输流 (Firehose) 订阅该主题,并将事件直接(无 lambda)传输到 S3 存储桶。在桶上定义了一个粘合表,以便我们可以使用 Athena 查询该表。

问题

在 Firehose 交付流中,我们配置了动态分区 (DP),键是事件记录的主键。它工作正常。但是,当我们在不到 10 秒的时间内发布 10K 事件时,我们得到了这个 DynamicPartitioning.ActivePartitionsLimitExceeded 错误,并且很多事件没有保存到具有正确前缀的存储桶中。

我尝试关闭 DP,但出现“AppendDelimiterToRecordProcessor 只能在启用动态分区时出现”错误。在我移除这个处理器后,所有事件最终都存储在一个没有适当分隔符的文件中,而 Athena 只能识别第一个。

问题

我是 Kinesis 的新手,但我认为 Kinesis 交付流 + Athena 应该可以很好地协同工作。在我看来,如果没有 DP,它就行不通?我想知道在去年底推出 DP 之前人们是如何使用它们的?

AWS doc 确实解释了这一点,但我只是想知道 Kinesis Firehose + Athena 是否可以在没有 DP 的情况下工作?我们自己真的不需要 DP。

更新

我的问题与以下类似,但是当 Firehose 的源是 SNS 主题时,我没有机会转换事件,而且我还不想编写 lambda 来转换数据。

Kinesis/Firehose/Athena - Creating queryable data from logs

Firehose to S3 with One Record Per Line

【问题讨论】:

  • 刚刚遇到这个问题,这似乎是宇宙中关于这个主题的唯一问题,所以,谢谢......哈哈。我遇到了同样的问题,尽管我的数据似乎确实到达了 S3。你能解决吗?我正在使用动态分区和 lambda 进行时间戳格式化,并且正在考虑完全放弃动态分区,如果这是通过它所需要的。
  • @wkhatch 我并没有真正解决它,只是通过使用另一个不那么多样化的字段而不是主键来解决它,因此即使发布了 10K 事件,分区键值也要少得多超过 500 的限制。这样,一切仍然正常。唯一的缺点是,如果我们可以使用主键作为前缀,那么同一记录的事件总是在 S3 中的同一文件夹下,并且更容易手动定位。
  • 啊,感谢您解释导致它的原因。这正是我正在做的,也是;试图通过关联设备的事件进行分区。显然,我们可以要求增加限制,但我会像你一样简化。我也完全停止使用内联解析,并在 lambda 中做了所有事情;同样的结果。再次感谢!

标签: amazon-web-services amazon-kinesis


【解决方案1】:

我面临同样的挑战和解决方案,应该按照以下方式设计分区数量

分区 * 缓冲时间(秒)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-02
    • 2021-09-12
    • 2021-02-13
    • 1970-01-01
    • 1970-01-01
    • 2017-08-26
    相关资源
    最近更新 更多