HTTP状态码429 "Too Many Requests" 是Elasticsearch(ES)在处理请求时可能会返回的一个错误状态码。以下是对这个问题的详细回答: 1. HTTP状态码429的含义 HTTP 429 Too Many Requests状态码表示客户端在给定的时间段内发送了过多的请求,超出了服务器处理的能力,因此服务器拒绝了这些请求。这是一种流量控制机制,旨...
单线程的bulk往往达不到ES集群的最大性能,所以用多线程来提高索引速度是个不错的方法。当ES回TOO_MANY_REQUESTS (429) 这个状态码的时候,就说明我们需要把线程数量减少了。 #增加刷新间隔 ES默认的索引刷新间隔index.refresh_interval是1s,到了这个周期后,ES就会创建一个新的段,把这个值加大来允许段能够有更长的...
如果出现了“TOO_MANY_REQUESTS”的错误信息,(错误代码示429),说明ES无法跟上当前索引的速度。当这种情况发生时,我们应该在再次尝试之前暂停索引,最好使用随机指数后退。 到底多少个线程才是最合适的,也要通过测试确定:首先尝试和CPU核数一样的线程数,然后2倍的数量,3倍的数量...到出现“TOO_MANY_REQUESTS”的错...
除了更好地利用集群的资源外,还有助于降低每个 fsync 的成本。 确保注意TOO_MANY_REQUESTS (429)响应代码(EsRejectedExecutionException使用 Java 客户端),这是 Elasticsearch 告诉我们它无法跟上当前索引速度的方式。发生这种情况时,应该在重试之前暂停索引,最好使用随机指数退避。 与调整批量请求的大小类似,只有测试才...
如果看到TOO_MANY_REQUESTS (429)和EsRejectedExecutionException则说明ES跟不上索引的速度,当集群的I/O或者CPU饱和就得到了工作者的数量。 十一:减少索引并发访问磁盘 如果是机械硬盘,你需要增加下面的配置到elasticsearch.yml中 index.merge.scheduler.max_thread_count: 1 ...
确保注意TOO_MANY_REQUESTS (429)响应代码(EsRejectedExecutionException使用 Java 客户端),这是 Elasticsearch 告诉我们它无法跟上当前索引速度的方式。发生这种情况时,应该在重试之前暂停索引,最好使用随机指数退避。 与调整批量请求的大小类似,只有测试才能确定最佳工作线程数量是多少。这可以通过逐渐增加线程数量来测试,...
请确保注意TOO_MANY_REQUESTS(429)响应代码(Java客户端的EsRejectedExecutionException),这是Elasticsearch告诉您无法跟上当前索引速率的方式。 发生这种情况时,应该再次尝试暂停索引,理想情况下使用随机指数回退。 与批量调整大小请求类似,只有测试才能确定最佳的worker数量。 这可以通过逐渐增加工作者数量来测试,直到集群上的...
写入reject、“429 too many requests” 等都是非常常见的错误,问题多半和线程池和队列大小有关系,需要结合业务场景进行问题排查。 其它参数设置 thread_pool.search.queue_size:500 thread_pool.search.size:200 thread_pool.search.min_queue_size:10 thread_pool.search.max_queue_size:1000 thread_pool.search....
客户端: 多线程,批量写 可以通过性能测试,确定最佳文档数量 多线程: 需要观察是否有HTTP 429(Too Many Requests)返回,实现 Retry以及线程数量的自动调节服务器端: 单个性能问题,往往是多个因素造成的。需要先分解问题,在单个节点上进行调整并且结合测试,尽可能压榨硬件资源,以达到最高吞吐量 使用更好的硬件。观察CPU...
但是要注意 bulk线程池队列的reject情况,出现reject代表ES的bulk队列已满,客户端请求被拒绝,此时客户端会收到429错误(TOO_MANY_REQUESTS),客户端对此的处理策略应该是延迟重试。不可忽略这个异常,否则写入系统的数据会少于预期。即使客户端正确处理了429错误,我们仍然应该尽量避免产生reject。