Amazon Elasticsearch Service에서 429 오류 "es_rejected_execution_exception"을 해결하려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2019년 8월 30일

Amazon Elasticsearch Service(Amazon ES) 클러스터에 데이터를 기록할 때 요청이 거부됩니다. 다음과 같은 ThreadpoolBulkRejected 오류가 발생합니다.

error":"elastic: Error 429 (Too Many Requests): rejected execution of org.elasticsearch.transport.TransportService$7@b25fff4 on 
EsThreadPoolExecutor[bulk, queue capacity = 200, org.elasticsearch.common.util.concurrent.EsThreadPoolExecutor@768d4a66[Running, 
pool size = 2, active threads = 2, queued tasks = 200, completed tasks = 820898]] [type=es_rejected_execution_exception]"

간략한 설명

es_rejected_execution_exception[bulk]은 대량 대기열 오류입니다. Elasticsearch 클러스터에 대한 요청 수가 대량 대기열 크기(threadpool.bulk.queue_size)를 초과하는 경우 이 오류가 발생합니다. 각 노드의 대량 대기열은 사용하는 Elasticsearch 버전에 따라, 50 - 200개의 요청을 보유할 수 있습니다. 대기열이 가득 차면 새 요청은 거부됩니다.

해결 방법

참고: 대부분의 Amazon ES 버전에서 대량 대기열 크기를 늘릴 수 없습니다. 대기열이 존재하는 이유는, 요청을 관리 가능한 수준으로 제한하기 위해서입니다. 자세한 내용은 Elasticsearch 설명서의 Threadpool 섹션을 참조하십시오.

다음 방법 중 하나를 사용하여 es_rejected_execution_exception 오류를 해결합니다.

  • 더 많은 노드 추가: 각 노드에는 대량 대기열이 있으므로, 노드를 더 추가하면 대기열 용량을 더 확보할 수 있습니다. 노드를 추가하려면 Amazon ES 도메인 구성(콘솔)을 참조하십시오. 참고: 새 노드에 배포할 활성 인덱싱 샤드가 충분하지 않으면 데이터 노드를 더 추가해도 소용이 없습니다. "활성 인덱싱 샤드"란, 지난 5분 이내에 하나 이상의 인덱싱 요청을 수신한 샤드를 말합니다.
  • 더 큰 인스턴스 유형으로 전환: 대량 요청을 위한 각 노드의 스레드 풀에 있는 스레드 수는 사용 가능한 프로세서 수와 같습니다. 가상 CPU(vCPU)가 더 많은 인스턴스로 전환하여 대량 요청을 처리할 더 많은 스레드를 확보합니다. 자세한 내용은 인스턴스 유형 선택 및 테스트를 참조하십시오.
  • 인덱싱 성능 향상: 문서 인덱싱 속도가 빨라지면 대량 대기열이 용량을 소진할 가능성이 줄어듭니다. 성능 튜닝에 대한 자세한 내용은 Elasticsearch 클러스터에서 인덱싱 성능을 개선하려면 어떻게 해야 합니까?를 참조하십시오.

이 문서가 도움이 되었습니까?

AWS에서 개선해야 할 부분이 있습니까?


도움이 필요하십니까?