elasticsearch es_rejected_execution_exception

问题描述 投票:0回答:4

我正在尝试索引一个包含 50,000 条日志的 12mb 日志文件。 在索引大约 30,000 条日志后,我收到以下错误

[2018-04-17T05:52:48,254][INFO ][logstash.outputs.elasticsearch] retrying failed action with response code: 429 ({"type"=>"es_rejected_execution_exception", "reason"=>"rejected execution of org.elasticsearch.transport.TransportService$7@560f63a9 on EsThreadPoolExecutor[name = EC2AMAZ-1763048/bulk, queue capacity = 200, org.elasticsearch.common.util.concurrent.EsThreadPoolExecutor@7d6ae98b[Running, pool size = 2, active threads = 2, queued tasks = 200, completed tasks = 3834]]"})

但是,我浏览了建议我增加 elasticsearch 批量队列大小的文档和 elasticsearch 论坛。我试过使用 curl 但我做不到。

curl -XPUT localhost:9200/_cluster/settings -d '{"persistent" : {"threadpool.bulk.queue_size" : 100}}'

增加队列大小是好的选择吗?我无法增加硬件,因为我的数据较少。

我面临的错误是由于队列大小的问题还是其他原因?如果有queue size如何在elasticsearch.yml中更新队列大小,在elasticsearch.yml中更新后是否需要重启es?

请告诉我。谢谢你的时间

elasticsearch logstash elastic-stack
4个回答
15
投票

一旦您的索引跟不上索引请求 - elasticsearch 将它们排入 threadpool.bulk.queue 并在队列中的请求数量超过 threadpool.bulk.queue_size 时开始拒绝

考虑限制索引是个好主意。线程池大小默认值通常很好;虽然您可以增加它们,但您可能没有足够的可用资源(内存、CPU)。

来自 elastic.co 的博文很好地解释了这个问题。


1
投票

当移动/索引大量数据时,它可以帮助告诉 ElasticSearch 不要立即尝试索引它们。默认情况下,它每 3 秒编制一次索引,但在迁移过程中,这可能会导致错误(如您发布的那样)以及性能问题。您可以尝试将

refresh_interval
设置为一些较大的值。

POST /myindex/_settings
{
  "settings": {
    "index": {
      "refresh_interval": "600s"
    }
  }
}

索引/迁移后,您应该将值设置回

3s
.


0
投票

通过减少批量解决了我的问题。

POST _reindex
{
"source":{
"index":"sourceIndex",
"size": 100
},
"dest":{
"index":"destIndex"}
}

0
投票

当 OpenSearch 集群被请求淹没而无法处理新请求时,会发生 rejected_execution_exception 错误。当您对大量文档进行批量索引时,可能会发生这种情况。为防止此错误,您可以尝试以下操作:

调整批量大小:减少单个批量操作中索引的文档数量,以减轻 OpenSearch 集群的压力。您可以在 osClient.helpers.bulk 方法中更改批量大小,也可以实现自定义函数以在索引之前将数据集分成更小的块,如上一个答案所示。

限制请求:在批量请求之间添加延迟,为 OpenSearch 集群提供一些喘息的空间。您可以修改 osClient.helpers.bulk 方法中的 wait 参数来增加批量请求之间的时间间隔。例如,您可以将 wait: 3000 更改为 wait: 5000 或更高的值。

增加重试次数:通过修改osClient.helpers.bulk方法中的retries参数,增加失败时的重试次数。这将使操作在集群处于压力下时有更多机会成功。

监控 OpenSearch 集群的性能:密切关注 OpenSearch 集群的性能,并考虑升级集群的资源(CPU、内存、存储)或节点数量以更好地处理索引工作负载。

优化 OpenSearch 集群的设置:您可以优化 OpenSearch 集群的设置,例如调整 refresh_interval 或 number_of_replicas,以提高索引性能。进行这些更改时要小心,因为它们可能会影响集群的稳定性和查询性能。

通过应用这些建议,您应该能够减轻 rejected_execution_exception 错误并成功地将数据从 MongoDB 批量导入到 OpenSearch。请记住监控集群的性能并根据需要调整设置,以找到适合您的特定用例的最佳配置。

© www.soinside.com 2019 - 2024. All rights reserved.