gpt4 book ai didi

c# - 收到无法从_bulk重试的失败后,ElasticSearch Nest BulkAll停止

转载 作者:行者123 更新时间:2023-12-02 22:44:21 25 4
gpt4 key购买 nike

使用BulkAll()批量插入我收到此奇怪的错误

BulkAll halted after receiving failures that can not be retried from _bulk

但是,当我检查异常时,我仍然获得成功的响应:
Successful low level call on POST: /cf-lblogs-2019.01.23/cloudflareloadbalancinglogelasticentity/_bulk?

我在这里做错了什么?下面是代码片段:
var waitHandle = new CountdownEvent(1);

var bulk = _client.BulkAll(group.ToList(), a => a
.Index(_index.Replace("*", string.Empty) + group.Key)
.BackOffRetries(2)
.BackOffTime("30s")
.RefreshOnCompleted(true)
.MaxDegreeOfParallelism(4)
.Size(group.Count()));

bulk.Subscribe(new BulkAllObserver(
onNext: response => _logger.LogInformation($"Indexed {response.Page * group.Count()} with {response.Retries} retries"),
onError: HandleInsertError,
onCompleted: () => waitHandle.Signal()
));

waitHandle.Wait();


private void HandleInsertError(Exception e)
{
var exceptionString = e.ToString();
_logger.LogError(exceptionString);
}

巢6.4.2。

flex 6.5.4。

最佳答案

这意味着可观察到的BulkAll无法索引由于无法重试而失败的一个或多个文档。

默认情况下,无法索引的文档的重试谓词是针对某项返回HTTP响应状态代码429,即尝试同时索引多个文档而集群无法处理的文档。

查看BulkAll()设置有两件事:

  • var bulk = _client.BulkAll(group.ToList(), a => agroup.ToList()将立即评估所有文档并将它们缓存在内存中的List<T>中。为了提高效率,您通常希望在批量索引时延迟枚举大型集合。如果group是可以传递给IEnumerable<T>BulkAll,则只需传递它。
  • .Size(group.Count()));
    这将尝试在一个批量请求中发送所有文档BulkAll的想法是它将同时发送多个批量请求,并一直这样做,直到所有文档都被索引为止。

    大小应设置为每个请求的合理大小;您可以通过计算每个文档的平均字节数,然后从小于5MB的位置开始,以字节为单位计算合理的大小,或者您可能想从每个请求说1000个文档开始,并评估索引的速度是否足以满足您的需求或者您开始​​收到429条回复。当后者开始发生时,这很好地表明您已接近要建立索引的文档的群集的索引限制的阈值。
  • 关于c# - 收到无法从_bulk重试的失败后,ElasticSearch Nest BulkAll停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54348798/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com