【发布时间】:2015-03-04 20:24:06
【问题描述】:
总结
我们需要提高过滤器性能(吞吐量)。
最可能的方法是扩展到多台服务器。
问题
如何正确横向扩展?
1) 增加底层索引中的分片数量是否允许并行运行更多渗透请求?
2) 如果 ElasticSearch 服务器只做渗透,它需要多少内存?
2 台 4GB RAM 的服务器还是一台 16GB RAM 的服务器更好?
3) 使用 SSD 会显着提高渗透器的性能,还是增加 RAM 和/或节点数量更好?
我们目前的情况
我们的职位索引中有 200,000 个查询(职位搜索提醒)。 我们能够运行 4 个调用 percolator 的并行队列。 每个查询能够在大约 35 秒内过滤 50 个作业的批次,因此我们可以过滤一下:
4 个队列 * 每批 50 个作业 / 35 秒 * 每分钟 60 秒 = 343 每分钟作业数
我们需要更多。
我们的工作索引有 4 个分片,我们正在使用位于该工作索引之上的 .percolator。
硬件:2 个处理器的服务器,总共 32 个内核。 32GB 内存。 我们为 ElasticSearch 分配了 8GB RAM。
当 percolator 工作时,我上面提到的 4 个 percolation queue 会消耗大约 50% 的 CPU。
当我们尝试将并行渗透队列的数量从 4 个增加到 6 个时,CPU 利用率跃升至 75% 以上。 更糟糕的是,percolator 开始因 NoShardAvailableActionException 而失败:
[2015-03-04 09:46:22,221][DEBUG][action.percolate][Cletus Kasady] [jobs][3] Shard 多渗透失败 org.elasticsearch.action.NoShardAvailableActionException:[工作][3] 空
该错误似乎表明我们应该增加分片的数量并最终添加专用的 ElasticSearch 服务器(+ 稍后增加节点的数量)。
相关: How to Optimize elasticsearch percolator index Memory Performance
【问题讨论】:
标签: performance elasticsearch elasticsearch-percolate