Elasticsearch 出现 “429 rejected” 报错,怎么办?

简介: Elasticsearch 出现 “429 rejected” 报错,怎么办?

1、引言

本系列文章介绍如何修复 Elasticsearch 集群的常见错误和问题。

这是系列文章的第五篇,主要探讨:Elasticsearch 出现 “429 reject 报错",怎么办?

第一篇:Elasticsearch 磁盘使用率超过警戒水位线,怎么办?

第二篇:Elasitcsearch CPU 使用率突然飙升,怎么办?

第三篇:Elasticsearch 断路器报错,怎么办?

第四篇:Elasticsearch JVM 堆内存使用率飙升,怎么办?

2、常见的“429拒绝请求”错误

线上报错描述:

问题 1:“我们目前节点还是有很多 reject 429,用了一些方法,比如增加Thread_pool 好像效果不大,还会load增高。还是很多堆积和reject。现在想咨询一下,是否只能增加服务器节点,如果增加,应该怎么样评估,更加合理?因为没有多余机器来做压测,只能根据现有的监控数据评估,能不能给些建议,重点来看哪些参数?”

问题2:“es集群,写入经常reject 429,同时经常会出现 request retries exceeded max retry timeout [60000] 超时的情况。想问下,一般都有什么办法缓解这种问题。现在数据堆积kafka的很多,消费不过来,会丢失一部分数据。目前节点的thread_pool 是200,调高了部分节点到300,效果不是特别明显。”

如上两个问题都和 “reject 429” 错误紧密结合在一起。

3、“429 拒绝请求”原因解读

当 Elasticsearch 拒绝请求时,它会停止操作并返回带有 429 响应码的错误。被拒绝的请求通常由以下原因引起:

  • 原因1:线程池资源耗尽。

检索线程池或者写入线程池资源耗尽,会出现:TOO_MANY_REQUESTS 错误消息。

  • 原因2:断路器报错,也就是内存出现熔断现象。
  • 原因3:超过限制的写入压力。

主要原因在于:将文档写入到 Elasticsearch 会以内存和 CPU 负载的形式导致系统负载升高。如果在存在过多频繁的写入操作,集群可能会变得饱和。这可能会对其他操作产生不利影响,例如搜索、集群协调和后台处理。

为了防止这些问题,Elasticsearch 在内部监控索引负载。当负载超过一定限度时,新的请求将会被拒绝。

写入请求最高内存上限 indexing_pressure.memory.limit 设置为堆内存的 10%。

我以 elasticsearch 8.0 单节点环境作为测试:

默认堆内存:4GB,未改动。

上截图 limit_in_bytes = 410202931 Byte = 391.2 MB,约等于 4GB 堆内存的 10%。

此外, “429 拒绝错误“可以作为衡量是否达到性能瓶颈的依据——做压力测试时可以不断增加并发,观察CPU使用率、磁盘IO使用率,当 Elasticsearch 返回 429 错误码时,可以认为 Elastic 集群达到负载极限。

4、如何检查 “429 拒绝请求”错误?

要检查每个线程池的拒绝任务数,可以使用如下的 cat 线程池 API。被拒绝任务与已完成任务的比例很高,尤其是在搜索和写入线程池中,这意味着 Elasticsearch 会定期拒绝请求。

我模拟多进程数百+批量 wildcard 查询和 bulk 批量写入方式将 CPU 和 堆内存尽可能打满,基本如下图所示:

执行如下命令,可以查看 rejected 拒绝情况。

GET /_cat/thread_pool?v=true&h=id,name,active,rejected,completed

即便上CPU被打满,依然没有出现 reject,需要更多并发请求压测

5、如何阻止或提前预防“429 拒绝请求”错误?

方案一:修复高CPU和高内存使用率问题。

如果 Elasticsearch 经常出现拒绝请求,则你所管理集群可能具有高 CPU 使用率或高 JVM 内存压力。

推荐阅读:

Elasitcsearch CPU 使用率突然飙升,怎么办?

Elasticsearch JVM 堆内存使用率飙升,怎么办?

方案二:避免出现内存熔断。

如果你的业务环境经常触发断路器错误或者内存熔断,请参阅断路器错误以获取有关诊断和预防错误的提示。

推荐阅读:Elasticsearch 断路器报错了,怎么办?

5、小结

做好监控和核心指标的预警工作,“防患于未然”。

你的实际业务场景有没有遇到类似问题,你是怎么解决和避免的?欢迎留言讨论。

参考

1.  https://www.elastic.co/guide/en/elasticsearch/reference/current/fix-common-cluster-issues.html

2.https://www.elastic.co/guide/en/elasticsearch/reference/current/index-modules-indexing-pressure.html

推荐

1、重磅 | 死磕 Elasticsearch 方法论认知清单(2021年国庆更新版)

2Elasticsearch 7.X 进阶实战私训课(口碑不错)

3、如何系统的学习 Elasticsearch ?


更短时间更快习得更多干货!

和全球近 1600+ Elastic 爱好者一起精进!

比同事抢先一步学习进阶干货!


相关实践学习
以电商场景为例搭建AI语义搜索应用
本实验旨在通过阿里云Elasticsearch结合阿里云搜索开发工作台AI模型服务,构建一个高效、精准的语义搜索系统,模拟电商场景,深入理解AI搜索技术原理并掌握其实现过程。
ElasticSearch 最新快速入门教程
本课程由千锋教育提供。全文搜索的需求非常大。而开源的解决办法Elasricsearch(Elastic)就是一个非常好的工具。目前是全文搜索引擎的首选。本系列教程由浅入深讲解了在CentOS7系统下如何搭建ElasticSearch,如何使用Kibana实现各种方式的搜索并详细分析了搜索的原理,最后讲解了在Java应用中如何集成ElasticSearch并实现搜索。  
相关文章
|
索引
ElasticSearch 报错及解决 详细 0405【已解决】
ElasticSearch 报错及解决 详细 0405【已解决】
1237 4
|
5月前
|
网络协议 Java Maven
多模块项目使用ElasticSearch报错
多模块项目使用ElasticSearch报错
188 9
|
关系型数据库 MySQL Java
实时计算 Flink版操作报错之遇到java.lang.IllegalStateException: The elasticsearch emitter must be serializable.的错误,如何处理
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
网络协议 Java Maven
多模块项目使用ElasticSearch报错
多模块项目使用ElasticSearch报错
428 6
|
网络协议 Java
elasticsearch7.1 安装启动报错
elasticsearch7.1 安装启动报错
420 1
|
JSON DataWorks 关系型数据库
DataWorks操作报错合集之同步Elasticsearch数据报错:Cat response did not contain a JSON Array,是什么导致的
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
|
Java Spring
解决Springboot集成ElasticSearch 报错:A bean with that name has already been defined in null and overriding
解决Springboot集成ElasticSearch 报错:A bean with that name has already been defined in null and overriding
527 2
|
Prometheus 监控 Cloud Native
实时计算 Flink版操作报错之在使用ES时遇到“java.lang.IllegalStateException: The elasticsearch emitter must be serializable”,是什么原因
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
Java
ElasticSearch启动报错 java version is an early-access build ,only use release builds【已解决】
ElasticSearch启动报错 java version is an early-access build ,only use release builds【已解决】
296 0
|
Linux
elasticsearch启动报错:unable to install syscall filter: java.lang.UnsupportedOperationException: seccomp
elasticsearch启动报错:unable to install syscall filter: java.lang.UnsupportedOperationException: seccomp
293 0

热门文章

最新文章