【问题标题】:Elasticsearch: How to optimize indexing performance?Elasticsearch:如何优化索引性能?
【发布时间】:2018-02-21 09:16:44
【问题描述】:

我需要找到一种方法(如果有的话)来加快索引速度。
目前我的集群设置包括 8 个存储优化的数据节点和 2 个内存优化的主节点,索引数据大约需要 20 小时。
存储在分片中时,数据量变得相对较大(~1TB)。

所有节点都在 AWS EC2 实例上启动并运行,只有主节点连接到负载均衡器 (ALB),所有对 Elasticsearch 的查询都通过该负载均衡器,因此所有批量索引查询都转到此负载均衡器,然后是一个主节点,最后是数据节点。
以下是在批量索引之前设置的

[集群]

  • 8 个存储优化的专用数据节点
  • 2 个内存优化的专用主节点

[索引]

  • number_of_shards:6
  • number_of_replicas: 0
  • 刷新间隔:-1

有没有什么方法可以通过这个设置来提高集群的索引性能?

【问题讨论】:

    标签: amazon-web-services elasticsearch amazon-ec2


    【解决方案1】:

    Elasticsearch 参考中有这个tune for indexing speed 文档。 除了索引属性,更具体地说是index.refresh_interval,您还可以配置indices.memory.index_buffer_size 属性。

    来自上述文档:

    确保 indices.memory.index_buffer_size 足够大,可以为每个分片提供最多 512 MB 的索引缓冲区来执行繁重的索引(除此之外,索引性能通常不会提高)。 Elasticsearch 采用该设置(Java 堆的百分比或绝对字节大小),并将其用作所有活动分片的共享缓冲区。非常活跃的分片自然会比执行轻量级索引的分片更多地使用此缓冲区。

    您还可以优化文档的映射以充分利用它。例如,如果可能,您应该使用自动生成的 ID,禁用任何您不需要/不需要的功能(_field_names 字段,或匹配短语前缀查询)

    【讨论】:

      【解决方案2】:

      我宁愿将分片的数量从 6 个增加到至少 50 个。平均而言,每个分片可以保留大约 25 到 50 GB 的数据,不要让它们太小或太大。 如果您将它们增加到更大的数量,您肯定会看到写入和读取的性能提升。

      【讨论】:

      • 如果每个索引都没有那么大,大概~1GB,你还觉得我应该增加分片的数量吗?
      • 否,如果索引为 1gb 左右,最好将分片减少到 1 或 2
      猜你喜欢
      • 1970-01-01
      • 2015-07-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-16
      • 1970-01-01
      • 2012-10-09
      • 1970-01-01
      相关资源
      最近更新 更多