0

我正在尝试在 couchbase 到 elasticsearch 之间迁移(复制)3500 万个文档(这是一个标准数量,不是太大)。

我的 elasticsearch(1.3 版)集群由 Microsoft Azure 上的 3 个 A3(4 核,7 GB 内存)CentOS 服务器组成(每台服务器相当于亚马逊上的一台大型服务器)。

我使用“计时数据流”索引来存储文档。每个索引代表一个月,由 3 个分片和 2 个副本组成。

当我启动迁移脚本时,我看到插入时间变得非常慢(每秒大约 10 个文档),并且集群中每台服务器的平均负载超过 1.5。此外,JVM 内存几乎增加到 100%,而 cpu 显示为 20%,IOps 最大显示为 20。(我使用 Marvel CNC 获取所有这些数据)

  1. 有没有人在弹性搜索中遇到过这类索引问题?
  2. 我想知道是否有任何我应该注意的参数来扩展java内存?
  3. 我的集群规范是否足以每秒处理 100 个索引。
  4. 索引时间取决于索引有多大?它应该那么慢吗?

Thnx Niv

4

1 回答 1

0

我引用了我在 google 组中得到的答案(链接

几个建议:

  1. 在大量插入之前禁用副本(将副本计数设置为 0),然后才再次启用它。

  2. 使用批处理,实际批量大小将取决于许多因素(文档大小、网络、实例强度)

  3. 遵循 ES 关于节点设置的建议,例如将 50% 的可用内存大小分配给 ES 的 Java 堆,不要在该机器上运行任何其他东西,并禁用交换性。

  4. 您的索引已经分片,请尝试将其分散到 3 个不同的服务器上,而不是将它们放在一台服务器上(“虚拟分片”)。这将有助于分散索引负载。

  5. 如果您自己不指定文档 ID,请确保使用最新的 ES,ID 生成机制有显着改进,有助于加快速度。

我应用了第 1 点和第 3 点,似乎问题解决了 :) 现在我以每秒 80 个文档的速度编制索引,并且平均负载很低(最大为 0.7)

我必须感谢发布此回复的Itamar Syn-Hershko 。

于 2014-09-14T16:14:18.687 回答