【发布时间】: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