首页 > 解决方案 > Elasticsearch 429 Too Many Requests _bulk 与同步请求

问题描述

我正在使用 AWS Elasticsearch 服务。在开发环境中有 t3.small 实例。我有大约 15 000 条记录要作为批量索引。我所做的是将这个数量分成每个 250 个项目(或低于 10 MiB)的块。并逐个运行带有refresh="wait_for"选项的_bulk 请求,并等待请求完成后再发送下一个请求。在某个时候,大约在 25 次迭代中,请求立即失败并显示消息

429 Too Many Requests /_bulk

以防万一,如果块大小为 500,这将在 25/2 请求时失败(大约 12)

它没有更多的说明。仅此而已,如果没有其他任何东西可以与我并行发送批量请求,我无法理解为什么会发生这种情况。我检查了数据大小小于 10MB。

我已经拥有的

  1. 我始终如一地发送每个请求,等待上一个请求
  2. 批量请求大小小于 10MiB
  3. 每个批量请求中包含不超过 250 条记录(+ 250 表示这是索引)
  4. 我正在使用 refresh="wait_for"
  5. 甚至在发送新请求之前有 2 秒的延迟(我强烈希望将其删除)
  6. 添加新实例或增加存储空间根本没有帮助

出现该错误的原因可能是什么?如果我始终如一地发送所有内容,如何保证我的请求不会失败?我可以通过任何其他选项来确保批量请求完全完成吗?

标签: node.jsamazon-web-serviceselasticsearch

解决方案


作为写拒绝的 429 错误消息表示批量队列错误。es_rejected_execution_exception[bulk] 表示您的队列已满并且任何新请求都被拒绝。当对 Elasticsearch 集群的请求数超过批量队列大小(threadpool.bulk.queue_size)时,就会出现此批量队列错误。每个节点上的批量队列可以容纳 50 到 200 个请求,具体取决于您使用的 Elasticsearch 版本。

您可以查阅此链接https://aws.amazon.com/premiumsupport/knowledge-center/resolve-429-error-es/并查看写拒绝最佳实践


推荐阅读