首页 > 解决方案 > 增加 ElasticSearch 中的队列容量

问题描述

弹性版本 7.8

为数千条记录运行此代码时出现错误:

var bulkIndexResponse = await _client.BulkAsync(i => i
                .Index(indexName)
                .IndexMany(bases));

                if (!bulkIndexResponse.IsValid)
                {
                    throw bulkIndexResponse.OriginalException;
                }

它最终崩溃并出现以下错误:

Invalid NEST response built from a successful (200) low level call on POST: /indexname/_bulk
# Invalid Bulk items:
operation[1159]: index returned 429 _index: indexname _type: _doc _id:  _version: 0 error: Type: 
es_rejected_execution_exception Reason: "Could not perform enrichment, enrich coordination queue at 
capacity [1024/1024]"

我想知道如何增加这种丰富的协调队列容量,以适应​​ BulkAsync 的连续调用,每次调用大约有一千条记录。

标签: elasticsearch

解决方案


您可以检查什么 thread_pool 已满,/_cat/thread_pool?v并在 elasticsearch.yml 中为每个节点增加队列(如忍者所说)。

但增加队列大小会影响堆消耗,随后可能会影响性能。

当您收到此错误时,可能有两个原因。首先,您要发送大批量请求。尝试将批量请求减少到 500 或更低。其次,您有一些性能问题。尝试找到并解决问题。也许您应该向集群添加更多节点。


推荐阅读