【问题标题】:Elastic search 403 Request throttled due to too many requests /_bulk弹性搜索 403 请求因请求过多而受到限制 /_bulk
【发布时间】:2021-02-22 10:53:17
【问题描述】:

我正在尝试将 100 万条记录同步到 ES,并且我正在使用批量 API 批量 2k 进行同步。 但是在插入大约 25k-32k 之后,弹性搜索出现以下异常。

Unable to parse response body: org.elasticsearch.ElasticsearchStatusException
ElasticsearchStatusException[Unable to parse response body]; nested: ResponseException[method [POST], host [**********], URI [/_bulk?timeout=1m], status line [HTTP/1.1 403 Request throttled due to too many requests]
403 Request throttled due to too many requests /_bulk]; nested: ResponseException[method [POST], host [************], URI [/_bulk?timeout=1m], status line [HTTP/1.1 403 Request throttled due to too many requests]
403 Request throttled due to too many requests /_bulk];

我正在使用 aws 弹性搜索。 我认为,我需要实施等待策略来处理它,例如继续检查 es 状态并在所有 ES 状态正常时调用批量插入。 但不确定如何实施? ES 是否为其提供任何预构建? 或者有什么更好的方法来处理这个问题?

提前致谢。

更新: 我正在使用 AWS 弹性搜索 6.8 版

【问题讨论】:

  • @dravit 我检查了这两个答案,但他们没有回答我要找的东西。基本上我正在寻找做“指数退避”的方法。
  • 指数退避方法的任何具体原因?
  • @dravit 所以我使用的是 AWS 弹性搜索,它们目前仅支持 ES 到 7.9 版本。而我的团队目前使用的是 6.8。此外,我已经在批量使用 2000 个文档的批量 API 进行调用。目前,我正在研究调用批量 API 并等待某个时间并发送下一个批量请求后检查 ES 响应的方法。如果您有更好的建议,请分享。
  • ES 开始抛出高内存使用率的错误原因。即使在我的本地机器上,我也从未遇到过这个问题。根据定价和您当前的计划,这可能是 AWS 的限制/错误。你可以尝试更大的批量大小,比如 6k 和 5 秒的显式等待吗?另外,refresh_interval 的值是多少(您会在索引设置中找到它)?

标签: amazon-web-services elasticsearch aws-elasticsearch


【解决方案1】:

感谢@dravit 在评论中包含my previous SO answer,在关注 cmets 之后,似乎 OP 想要提高批量索引的性能并想要指数退避,我认为 Elasticsearch 无法提供开箱即用的功能。

我看到你在每一秒后暂停 1 秒,这在所有情况下都不起作用,如果你有大量的批次和文档要索引,肯定会花费很多时间。我这边还有一些提高性能的建议。

  1. 在 Elasticsearch 中关注 my tips to improve the reindex speed,查看此处列出的所有内容都适用,并通过哪些因素提高速度。
  2. 找到最适合您的环境的批处理策略,我不确定,但来自@spinscale 的this 文章可能会有所帮助,或者您可以在https://discuss.elastic.co/ 上提问,我记得他在一次网络研讨会上分享了一个非常好的批处理策略,但找不到它的链接。
  3. 注意除批量线程池和队列大小之外的各种 ES 指标,看看您的 ES 是否仍有容量,您是否可以增加队列大小并提高向 ES 发送请求的速率。

【讨论】:

【解决方案2】:

查看错误处理指南here

如果您收到由于请求过多或 429 Too Many Requests 错误而导致的持续 403 请求受到限制,请考虑垂直扩展。如果负载会导致内存使用量超过 Java 堆的最大大小,Amazon Elasticsearch Service 会限制请求。

垂直扩展您的应用程序或增加请求之间的延迟。

【讨论】:

  • 可能不是最好的方法,因为这也可以通过其他方式进行控制。
  • @mehdi fahti ,我已在文档中阅读此内容,请仔细阅读问题。我试图寻求一种更好的方法来“增加请求之间的延迟”。请阅读问题。
猜你喜欢
  • 1970-01-01
  • 2020-11-20
  • 1970-01-01
  • 2012-11-29
  • 1970-01-01
  • 1970-01-01
  • 2018-03-10
  • 1970-01-01
  • 2015-05-26
相关资源
最近更新 更多