Elasticsearch 索引速度慢

Posted

技术标签:

【中文标题】Elasticsearch 索引速度慢【英文标题】:Slow index speed of Elasticsearch 【发布时间】:2016-03-01 08:14:22 【问题描述】:

我们将 ES 2.0 部署在 3 个 EC2 c4.4xlarge(16 核,32gb 内存)节点上,为 ES 分配 16G,附加 500GB,每个节点具有 io1/4000 IOPS。

问题:我们期望此硬件配置具有出色的性能,但是观察到索引速度非常慢

我们的文档大小约为 10-50k,我们使用 Java 传输客户端插入。前 50,000 人的速度还可以,大约 1000 次/秒,然后急剧下降到 100-200 次/秒。

与此同时,我们正在关注低资源消耗:

    CPU 大约只有 1-20%(16 核 CPU) IO 写入速度仅为 4-10Mb/秒 内存消耗仅约 20-30%

需求:所以我不明白为什么它这么慢,而所有的资源都那么免费,我该怎么做才能提高效率?强> 谢谢。

这是我们正在使用的配置文件:

cluster.name:  env - app 
path.data: /data/es
path.logs: /data/es-logs
network.host: 0.0.0.0
discovery.zen.ping.unicast.hosts: ["xxxx"]
bootstrap.mlockall: true
threadpool.search.queue_size: 300
threadpool.index.type: fixed
threadpool.index.size: 16
threadpool.index.queue_size: 250000
index.refresh_interval: 1s
index.translog.flush_threshold_ops: 50000
indices.memory.index_buffer_size: 30%
indices.memory.min_shard_index_buffer_size: 12mb
indices.memory.min_index_buffer_size: 96mb
script.inline: on
script.indexed: on
http.cors.enabled: true
http.cors.allow-origin: /https?:\/\/localhost(:[0-9]+)?/

这是运行作业时的 htop 和 iostat:

【问题讨论】:

你在做批量索引吗?你有多少副本?您更改了多少默认 ES 设置? 我们正在模拟高并发写入。这里有 5 个分片和 2 个副本。我已经更新了设置文件,仅供参考。 你在执行search operationsbulk indexing?索引请求也会发送到一个节点还是三个节点? 在编制索引时进行的搜索操作很少。我们使用传输客户端连接到 3 个节点,但我们总是注意到一个节点的活动线程比其他两个节点多得多。我们还尝试了异步 API 来索引,但是由于进程缓慢,索引作业排队的速度非常快,并且开始拒绝很多。 【参考方案1】:

将您的 ES 升级到最新版本,因为在最近的版本中,它们使其对生产更加友好,现在最稳定的版本是最新的 2.3

您可以尝试以下方法来加快索引速度:

    制作一些主节点,将其与数据节点分开,因为这样可以减少所有集群的负载。 禁用操作系统交换,由 ES 处理并检查所有机器上的堆大小Heap Sizing 始终检查您的文档大小相似,您可以使用批量索引并在其中调整您的设置,例如记录数或内存大小的 chunk_size 如果您正在使用脚本,请尝试对其进行优化,因为它们会使索引速度变慢,如果可能的话,您可以存储脚本值作为预处理,因为 ES 不是为处理脚本而设计的。 检查每个节点的分片数量,并尝试使用路由在节点之间进行平衡 阅读更多关于 ES 人员如何建议生产就绪系统工作的信息Elasticsearch in Production 另一个关于提高 Elasticsearch 索引性能的博客Performance Considerations for Elasticsearch Indexing

查看此答案以获得在三台服务器上设置 ELK Stack 的最佳方法。 Optimal way to set up ELK stack on three servers

【讨论】:

以上是关于Elasticsearch 索引速度慢的主要内容,如果未能解决你的问题,请参考以下文章

亿级规模的Elasticsearch优化实战

ElasticSearch是什么?为什么快?倒排索引是什么?ElasticSearch的应用?

Elasticsearch学习2--Elasticsearch数据类型简介

elasticsearch学习笔记-倒排索引以及中文分词

Elasticsearch:ES 倒排索引为啥查询速度会这么快

如何提高ElasticSearch 索引速度