【问题标题】:How to tune Elasticsearch to make it indexing fast?如何调整 Elasticsearch 以使其快速索引?
【发布时间】:2018-10-11 03:09:57
【问题描述】:

我的 ElasticSearch 不会做一些复杂的查询。我使用 ElasticSearch 只是为了在大型数据集上实现快速搜索性能。

运行良好。搜索简单快捷。

但是随着索引中的文档变得庞大,添加新文档变得越来越慢。

  • 当索引的大小很小时,添加/索引 100 万个文档大约需要 250 秒。
  • 但是当同一个索引的大小达到大约 50 GB 时,添加 100 万个文档大约需要 1000 秒。
  • 当同一索引的大小达到 100 GB 时,添加 100 万个文档需要更长的时间。
  • 有时在索引100万个文档的过程中,我可以看到弹性搜索连接错误,错误来自代码行附近的代码。 "//

我想调整 ElasticSearch 集群,使其仍能快速返回搜索结果,但我也希望它能够快速索引/添加文档,即使索引达到 100 GB 或更大。

我愿意

  • 在一个集群中使用 3 个节点(我没有找到关于集群中节点数的好的答案,所以按照一些文章的建议,三个似乎是一个不错的数字)
  • 我会为每个索引使用 5 个分片 1 个副本。 (我也没有找到合适的号码,这是现在的默认号码)
  • 现在,我在一个集群上有 5 - 10 个索引,集群大小为 1000 GB(使用了 300 GB)。如果我不是在 1000 GB 集群上运行 10 个索引,而是运行一个索引一个集群(集群大小为 200 GB),那么在索引和搜索方面的性能会更好吗?
  • 我添加到索引中的文档是汇总的投影数据。文档的字段编号从 6 到 12 等。我制作了大部分字段关键字数据类型,如果我制作较少的字段,例如只制作一半的字段关键字,我可以将索引文档的速度提高多少? (在我的例子中,索引大小达到 100 GB,每天我批量索引/添加 100 万个文档到索引中。

那么我可以对上述设置进行哪些更改以提高索引速度和性能,并减少过程中的 Elasticsearch 连接错误等错误?

我正在使用 AWS 托管的 Elasticsearch。

我还能做什么?

谢谢!

【问题讨论】:

标签: elasticsearch


【解决方案1】:

当您索引文档时,您的 es 集群也会尝试将该数据同步到其他节点。为了获得更好的索引性能,可以进行一些改进。

1 - 在索引时设置较大的 refresh_interval。这将延迟跨节点的数据同步并加快索引速度。

2 - 在批量索引时保持最佳批量大小。

3 - 正确设置堆大小,例如对于 64Gb 节点,31 Gb 应该是最佳堆。详情-https://www.elastic.co/guide/en/elasticsearch/guide/current/heap-sizing.html

4 - 增加文件描述符和 MMap - https://www.elastic.co/guide/en/elasticsearch/guide/current/_file_descriptors_and_mmap.html

5 - 如果您在摄取时转换数据,则可以使用专用摄取节点 - https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-node.html

6 - 禁用复制(您可以在大索引后启用它)

【讨论】:

  • 最佳批量大小是多少? 1000?
  • 没有,这取决于您的文档大小,分片数量等...
  • 当您的索引大小变大时,最佳批量大小会改变吗?所以你必须偶尔测试一下你的批量大小?
  • 批量索引时,ES首先将所有数据保存在内存中,然后执行索引。所以它总是取决于你的内存而不是磁盘上的数据。所以大小应该通过记住在内存中保留一批数据后,ES应该有足够的内存来执行其他操作。
猜你喜欢
  • 2013-06-05
  • 1970-01-01
  • 2010-12-27
  • 2022-01-17
  • 2010-10-25
  • 2016-03-01
  • 1970-01-01
  • 2020-10-19
  • 2021-08-11
相关资源
最近更新 更多