php エディター Apple は、ES バッチリクエストの一般的な問題「es_rejected_execution_Exception」を紹介します。 Elasticsearch を使用してバッチ リクエストを行うと、この例外が発生することがあります。この例外は通常、同時リクエストの数が Elasticsearch サーバーの処理能力を超え、リクエストの実行が拒否されたことを示します。この記事では、この例外の原因を分析し、問題をスムーズに処理するための解決策を提供します。
約 500 万個のエントリのスライスがあります (わかりやすくするために、各エントリはバイト スライスであると仮定します。これは、getIndexerItem
関数インデクサー項目を使用してマップされます) ) を 200 回の碁ルーチンに均等に分割しました。次に、各 go ルーチンは push
関数を呼び出し、スライス長は 5M/200 です。
Refresh:wait_for
についての私の理解では、elastic に対してリクエストが行われるときは常に、そのリクエストによって行われた変更が検索に表示される場合にのみ完了します (IMO では、バルク リクエストではなくなりました)この特定のリクエストのキュー))。では、なぜこのエラーが発生するのでしょうか?
すべてのエントリは同じインデックス ankit-test
に入ります。
他のプロセスがいかなる形でもインデックスと対話しないと仮定します。
複数の ES ドキュメントを使用して、上記の問題の解決策を見つけることができました。以下の回答は私の理解に基づいています。改善/修正できる点を見つけた場合は、コメントを残してください。
これはリクエストのライフサイクルです:
私の問題は、refresh = false
(デフォルト) を使用してリクエストを送信することです。代わりに、 refresh = wait_for
を使用してください。なぜ?リフレッシュには 3 つのモードがあります:
refresh = true
よりも (サーバー負荷の点で) 安価ですが、応答を送り返す前にリクエストが完了していることが保証されます。リクエストはノードキューから削除されました。 すべてのデータが同じノードにリダイレクトされ、refresh = false
であるため、既存のリクエストがキューからクリアされる前に応答が返され、オーバーフローが発生しました。
以上がES バッチリクエスト `es_rejected_execution_Exception`の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。