弹性在压力下给出不一致的结果
Elastic gives inconsistent results under stress
我们的 ES 相当慢,我们还没有优化它(和查询),但是根据 this link,来自 Elastic 的请求拒绝是一种反馈形式,要求减慢和调整体积大小。
我们构建了一种背压形式,其中阻塞批量(同时发送的单个请求的列表,我们还没有使用 MSearch)的大小取决于前一个批量中拒绝了多少请求.在开始新的之前,我们等待当前的批量完成。显然,所有被拒绝的请求都被重新注入到请求队列中(以构造查询所需的数据的形式)。例如,如果我们的 Elastic 可以同时处理 500 个请求,而我们发送了 600 个,其中一些将被拒绝,新的大小将减少到 480(20% 折扣)。
我们发现 ES return 先前拒绝的请求 的结果不同。例如,它可能 return 类似于预期的结果,但偏移量为 2。我们还缺少结果,其中一个地址应该有 1 个结果,但由于这个错误而有 none。
如果批量大小小于 ES 可以处理的阈值,一切都会按预期进行,我们会得到预期的结果。
看起来不像是库的 (elastic4s) 问题。
弹性配置:
2 个节点,每个节点有 5 个分片
每个节点:
2 CPU,32 GB 内存,16 GB 堆。其他都是默认的
我在互联网上找不到任何信息,有人遇到过这个问题吗?解决方案是什么?
到目前为止我们尝试了什么:
Thread.sleep
如上文 link 所示。
正在删除查询级别的缓存并将其从索引中删除。
在不同的(较慢的)硬件上尝试相同的索引。
已验证这不是竞争条件(在我们的代码中)问题。
更新:
the query喜欢什么。
搜索线程池:
"search" : {
"type" : "fixed",
"min" : 4,
"max" : 4,
"queue_size" : 1000
},
第二次更新:
我们还尝试为我们的查询设置首选项(认为这是分片的问题):.preference(Preference.Primary)
没有肯定的结果(它们比以前更加随机)。使用此设置连续运行两次会给出不同的 "random" 结果,因此这是不一致的。
我们的 ES 相当慢,我们还没有优化它(和查询),但是根据 this link,来自 Elastic 的请求拒绝是一种反馈形式,要求减慢和调整体积大小。
我们构建了一种背压形式,其中阻塞批量(同时发送的单个请求的列表,我们还没有使用 MSearch)的大小取决于前一个批量中拒绝了多少请求.在开始新的之前,我们等待当前的批量完成。显然,所有被拒绝的请求都被重新注入到请求队列中(以构造查询所需的数据的形式)。例如,如果我们的 Elastic 可以同时处理 500 个请求,而我们发送了 600 个,其中一些将被拒绝,新的大小将减少到 480(20% 折扣)。
我们发现 ES return 先前拒绝的请求 的结果不同。例如,它可能 return 类似于预期的结果,但偏移量为 2。我们还缺少结果,其中一个地址应该有 1 个结果,但由于这个错误而有 none。
如果批量大小小于 ES 可以处理的阈值,一切都会按预期进行,我们会得到预期的结果。
看起来不像是库的 (elastic4s) 问题。
弹性配置: 2 个节点,每个节点有 5 个分片
每个节点: 2 CPU,32 GB 内存,16 GB 堆。其他都是默认的
我在互联网上找不到任何信息,有人遇到过这个问题吗?解决方案是什么?
到目前为止我们尝试了什么:
Thread.sleep
如上文 link 所示。正在删除查询级别的缓存并将其从索引中删除。
在不同的(较慢的)硬件上尝试相同的索引。
已验证这不是竞争条件(在我们的代码中)问题。
更新:
the query喜欢什么。
搜索线程池:
"search" : {
"type" : "fixed",
"min" : 4,
"max" : 4,
"queue_size" : 1000
},
第二次更新:
我们还尝试为我们的查询设置首选项(认为这是分片的问题):.preference(Preference.Primary)
没有肯定的结果(它们比以前更加随机)。使用此设置连续运行两次会给出不同的 "random" 结果,因此这是不一致的。