美文网首页ELK
[Elasticsearch] 如何提高索引速度

[Elasticsearch] 如何提高索引速度

作者: techhow | 来源:发表于2017-10-27 20:43 被阅读0次

问题背景

上亿规模的数据做索引按照Elasticsearch默认的配置做索引的速度非常慢,时间成本比较高,如何加快建索引的速度呢?

解决方法

使用bulk API,调整 bulk 线程池和队列

  1. 每个请求大小建议在5-15MB,逐步增大测试,当接收到EsRejectedExecutionException,就说明已经到达节点的瓶颈了,就需要减少并发或者升级硬件增加节点
  2. 当写入数据时,确保bulk请求时轮询访问所有节点,不要发送所有请求到一个结点导致这一个节点要在内存存储所有请求的数据去处理

加大 index refresh间隔, 目的除了降低 io, 更重要的降低了 segment merge 频率

比如,设置间隔refresh_interval: 120s。如果是初次建索引可以禁止replia和refresh,即number_of_replicas:0且refresh_interval:-1。

curl -XPUT 'localhost:9200/twitter/_settings?pretty' -H 'Content-Type: application/json' -d'
{
    "index" : {
        "refresh_interval" : "-1",
        "number_of_replicas" : "0"
    }
}

当然,最后别忘了再改回来,还有多执行一个merge操作

curl -XPUT 'localhost:9200/twitter/_settings?pretty' -H 'Content-Type: application/json' -d'
{
    "index" : {
        "refresh_interval" : "1s",
        "number_of_replicas" : "1"
    }
}
curl -XPOST 'hs002:9200/searchq/_forcemerge?max_num_segments=5&pretty'

加大 translog flush ,目的是降低 iops, writeblock

对于 flush 操作,Elasticsearch 默认设置为:每 30 分钟主动进行一次 flush,或者当 translog 文件大小大于 512MB (老版本是 200MB)时,主动进行一次 flush。这两个行为,可以分别通过 index.translog.flush_threshold_period 和 index.translog.flush_threshold_size 参数修改。

如果导入的文档没有唯一的ID,可以使用Elasticsearch自动生成的唯一ID

分析 Es 写入流程可以看到,写入 doc 时如果是外部指定了 id,es 会先尝试读取原来doc的版本号, 判断是否需要更新,使用自动生成 doc id 可以避免这个环节.

使用SSD

SSD 是经济压力能承受情况下的不二选择。减少碎片也可以提高索引速度,每天进行优化还是很有必要的。

参考资料
  1. 将 ELASTICSEARCH 写入速度优化到极限
  2. elasticsearch 如何提高插入数据速度?
  3. 亿级规模的Elasticsearch优化实战
  4. segment、buffer和translog对实时性的影响
  5. Update Indices Settings
  6. 如何提高ElasticSearch 索引速度

相关文章

  • Elasticsearch 版本升级新增功能和改进

    Elasticsearch 7.10的新增功能和改进 ** 索引速度提高 **Elasticsearch 7.10...

  • [Elasticsearch] 如何提高索引速度

    问题背景 上亿规模的数据做索引按照Elasticsearch默认的配置做索引的速度非常慢,时间成本比较高,如何加快...

  • 如何提高ElasticSearch 索引速度

    我Google了下,大致给出的答案如下: 使用bulk API 初次索引的时候,把 replica 设置为 0 增...

  • 自定义Spark Partitioner提升es-hadoop

    前言 之前写过一篇文章,如何提高ElasticSearch 索引速度。除了对ES本身的优化以外,我现在大体思路是尽...

  • ElasticSearch Bulk 源码解析

    本来应该先有这篇文章,后有如何提高ElasticSearch 索引速度才对。不过当时觉得后面一篇文章会更有实际意义...

  • es优化-翻译

    索引速度优化[https://www.elastic.co/guide/en/elasticsearch/refe...

  • elasticsearch 的基础概念及应用

    目录 === 1、什么是elasticsearch——1、搜索引擎干了什么——2、elasticsearch 如何...

  • mongodb笔记04--索引

    索引: 索引提高查询速度,降低写入速度,权衡常用的查询字段,不必在太多列上建索引 在mongodb中,索引可以按字...

  • MySQL索引

    索引的作用类似指向表中行的指针,能够提高查询速度。尽管索引可以提高查询速度,但是不必要的索引会浪费空间,并且在进行...

  • Mongodb学习笔记 (五) 之 索引

    索引 索引提高查询速度,降低写入速度。权衡常用的查询字段,不必在太多列上建索引 在mongo中,索引可以按字段升序...

网友评论

    本文标题:[Elasticsearch] 如何提高索引速度

    本文链接:https://www.haomeiwen.com/subject/lcvdpxtx.html