2017-08-01 35 views
0

我在爲我的項目進行彈性搜索時做了一些性能調整,我需要一些幫助來提高彈性搜索索引速度。我正在使用ES 5.1.1,並且我有2個節點設置了索引的8個碎片。我有2個節點的服務器,每個服務器配有16GB RAM和12個CPU,時鐘速度爲2.2GHz。我需要在1.5小時內索引大約25,000,000份文件,目前我正在大約4小時內完成這項工作。我已經完成了以下配置更改以提高索引時間。Elasticsearch索引速度隨着時間而降低

  • 設置 'indices.store.throttle.type' 爲 'none'
  • 設置 'refresh_interval' 到 '-1'
  • 增加 'translog.flush_threshold_size' 到1GB
  • 設置 'number_of_replicas'爲 '0'
  • 使用8個碎片爲索引
  • 設置VM選項-Xms8g -Xmx8g(在RAM大小的一半)

我正在使用批量處理器在我的Java應用程序中生成文檔,並且正在使用以下配置來設置批量處理器。

批量操作數:10000
批量大小在MB:100個
併發請求:100
刷新間隔:30

起初,我可繞356167指數在第一分鐘。但隨着時間的推移,它下降,約1小時後,其每分鐘121280文件。

如何在一段時間內保持索引率穩定?有沒有其他方法可以提高性能?

回答

0

我強烈建議不要更改配置參數,如超越對衝水大小,節流,除非你知道自己在做什麼(這並不意味着閱讀一些網絡上的博客文章:-)

嘗試每個服務器的單個碎片,尤其是將大小減小到10MB。 100MB * 100個併發請求意味着您需要10GB的堆來處理這些(不需要做其他事情)。我想不是所有的文檔都會被索引,因爲你的線程池中被拒絕的任務。

從小開始變大,而不是開始大,但沒有任何洞察力在您的索引。

+0

嗨@alr,非常感謝您對此的看法。我同意你的觀點。其實我從一個分片和默認配置開始。通過使用上述配置,我可以大大縮短時間。此外,我可以通過在早期使用自定義ID的情況下使用自動生成的ID來節省大量時間。我使用上述配置多次測試索引,但沒有得到EsRejectedExecutionException。所以這並不意味着我的所有對象都被索引了嗎?再次感謝你。 –