web-dev-qa-db-ja.com

Elasticsearchのインデックス速度が遅い

ES 2.0を3つのEC2 c4.4xlarge(16コア、32 GBメモリ)ノードに展開し、ESに16Gを割り当て、それぞれにio1/4000 IOPSの500GBを接続しました。

問題:このハードウェア構成では優れたパフォーマンスが期待されますが、非常に遅いインデックス作成速度が観察されます

私たちのドキュメントのサイズは約10〜50kで、Java=トランスポートクライアントを使用して挿入します。速度は最初の50,000では約1000 /秒で問題なく、劇的に100〜200に低下しました。 /秒。

その間、リソース消費量が少ないことに注目しています。

  1. CPUは約1〜20%のみ(16コアCPU)
  2. IO書き込みは約4-10Mb /秒のみです
  3. メモリ消費量は約20〜30%のみ

要件:すべてのリソースが非常に無料であるのになぜ遅いのか理解できません効率を高めるにはどうすればよいですか?ありがとうございます。

これが私たちが使っている設定ファイルです:

cluster.name: {{ env }}-{{ app }}
path.data: /data/es
path.logs: /data/es-logs
network.Host: 0.0.0.0
discovery.zen.ping.unicast.hosts: ["xxxx"]
bootstrap.mlockall: true
threadpool.search.queue_size: 300
threadpool.index.type: fixed
threadpool.index.size: 16
threadpool.index.queue_size: 250000
index.refresh_interval: 1s
index.translog.flush_threshold_ops: 50000
indices.memory.index_buffer_size: 30%
indices.memory.min_shard_index_buffer_size: 12mb
indices.memory.min_index_buffer_size: 96mb
script.inline: on
script.indexed: on
http.cors.enabled: true
http.cors.allow-Origin: /https?:\/\/localhost(:[0-9]+)?/

ジョブの実行中のhtopとiostatは次のとおりです。 htop

iostat

16
PeiSong Xiong

ESを最新バージョンにアップグレードしてください。最近のリリースでは、ESがより生産的に使いやすくなり、現在最も安定したリリースが最新のものです2.3

次のことを試して、インデックス作成を高速化できます。

  1. すべてのクラスターの負荷を軽減するため、いくつかのマスターノードをデータノードとは別に作成します。
  2. OSスワッピングを無効にすると、ESがそれを処理し、すべてのマシンのヒープサイズを確認します ヒープサイズ
  3. ドキュメントが常に同じサイズであることを確認します。バルクインデックスを使用して、レコード数またはメモリサイズのchunk_sizeなどの設定を調整できます。
  4. スクリプトを使用している場合は、インデックス作成が遅くなるため、スクリプトを最適化しようとします。ESはスクリプトを処理するように設計されていないため、前処理としてスクリプトの値を保存できます。
  5. ノードあたりのシャードの数を確認し、ルーティングを使用してノード間でシャードのバランスをとるようにしてください
  6. ESの連中がプロダクションレディシステムを機能させる方法を詳しく読む Elasticsearch in Production
  7. Elasticsearch Indexingのパフォーマンス向上に関するもう1つのブログ Elasticsearch Indexingのパフォーマンスに関する考慮事項

3つのサーバーでELKスタックをセットアップする最適な方法については、この回答を確認してください。 つのサーバーでELKスタックを設定する最適な方法

11
Sumit Kumar