PHP 편집기 Apple은 ES 일괄 요청의 일반적인 문제인 `es_rejected_execution_Exception`을 소개합니다. Elasticsearch를 사용하여 일괄 요청을 할 때 가끔 이 예외가 발생합니다. 이 예외는 일반적으로 동시 요청 수가 Elasticsearch 서버의 처리 용량을 초과하여 요청 실행이 거부되었음을 나타냅니다. 이 문서에서는 이 예외의 원인을 분석하고 문제를 원활하게 처리하는 데 도움이 되는 솔루션을 제공합니다.
약 500만 개의 항목으로 구성된 슬라이스가 있습니다. (단순화를 위해 각 항목이 바이트 슬라이스라고 가정하고 getIndexerItem
函数映射到索引器项),我将其平均分配给 200 个 go 例程。然后每个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 중국어 웹사이트의 기타 관련 기사를 참조하세요!