【问题标题】:Kinesis consumer getRecords does not return 10,000 records consistentlyKinesis 消费者 getRecords 不会始终返回 10,000 条记录
【发布时间】:2021-01-28 16:26:05
【问题描述】:

我有一个 kinesis 流(20 个分片),数据延迟大约 1 天,由基于 KCL 的 kinesis 消费者使用。消费者部署了 20 个 ECS 实例,因此每个实例都有一个线程从每个分片中提取数据。

根据文档,单个 getRecords 调用似乎可以获取多达 10,000 条记录或最大有效负载大小为 10 MB。但是,当我监控消费者日志时,并非所有分片似乎都达到了这个限制。使用单个 getRecords 调用获取的记录在消费者实例之间非常不一致。一些调用获取大约 100-400 条记录,而一些调用获取大约 4000-5000 条记录。在极少数情况下,某些调用会获取 9999 条记录。结果,数据延迟并没有减少。

消费者需要大约 5 分钟来处理 10,000 条记录,因此也没有达到读取吞吐量。

是否有对此的解释或我可以研究的指标,以进一步调试此问题?

【问题讨论】:

  • 在您描述的情况下,getRecords 被调用的频率如何(对于分片)?

标签: amazon-web-services sharding producer-consumer amazon-kinesis


【解决方案1】:

根据您的记录大小,这可能是由于以下Kinesis service limit

每个分片通过 GetRecords 最多可以支持每秒 2 MB 的最大总数据读取速率。如果对 GetRecords 的调用返回 10 MB,则在接下来的 5 秒内进行的后续调用将引发异常。

如果这确实是您遇到的限制,您可能需要考虑添加更多分片。

【讨论】:

    【解决方案2】:

    我不熟悉您的具体应用程序,因此可能不相关,但也许 KDS 增强型扇出可以提供帮助:

    https://docs.aws.amazon.com/streams/latest/dev/enhanced-consumers.html

    您可能还需要考虑延长保留期。

    请注意,两项建议均需额外收费。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-05-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多