了解elasticsearch circuit_break_exception

Liq*_*tal 4 http flask elasticsearch

我试图弄清楚为什么在从 python Web 应用程序索引文档时会收到此错误。

本例中的文档是大小为 10877 KB 的文件的 base64 编码字符串。

我将它发布到我的网络应用程序,然后通过 elasticsearch.py​​ 将它发布到我的弹性实例。

我的弹性实例抛出一个错误:

    TransportError(429, 'circuit_breaking_exception', '[parent] Data                         
    too large, data for [<http_request>] would be 
    [1031753160/983.9mb], which is larger than the limit of 
    [986932838/941.2mb], real usage: [1002052432/955.6mb], new bytes 
    reserved: [29700728/28.3mb], usages [request=0/0b, 
    fielddata=0/0b, in_flight_requests=29700728/28.3mb, 
    accounting=202042/197.3kb]')
Run Code Online (Sandbox Code Playgroud)

我试图理解为什么我的 10877 KB 文件最终大小为 983mb,如弹性报告的那样。

我知道增加 JVM 最大堆大小可能允许我发送更大的文件,但我更想知道为什么请求大小看起来是我期望的大小的 10 倍。

ibe*_*xit 7

让我们一步一步地看看这里有什么:

[parent] Data too large, data for [<http_request>]
Run Code Online (Sandbox Code Playgroud)

给出断路器的名称

would be [1031753160/983.9mb], 
Run Code Online (Sandbox Code Playgroud)

说,当请求被执行时,堆大小的样子

which is larger than the limit of [986932838/941.2mb],
Run Code Online (Sandbox Code Playgroud)

告诉我们上面断路器的当前设置

real usage: [1002052432/955.6mb],
Run Code Online (Sandbox Code Playgroud)

这是堆的真正用途

new bytes reserved: [29700728/28.3mb],
Run Code Online (Sandbox Code Playgroud)

实际上是估计,请求将产生什么影响(需要创建以处理请求的数据结构的大小)。您的 ~10MB 文件可能会消耗 28.3MB。

usages [
    request=0/0b, 
    fielddata=0/0b,
    in_flight_requests=29700728/28.3mb, 
    accounting=202042/197.3kb
]
Run Code Online (Sandbox Code Playgroud)

最后一行告诉我们估计是如何计算的。