2017-02-20 3 views
1

우리의 ES는 아직 느리지 만 최적화하지는 않았지만 this link에 따르면 탄성으로부터의 요청 거부는 속도를 늦추고 적응 시키라는 피드백의 한 형태입니다. 벌크의 크기.탄성이 응력 하에서 일치하지 않는 결과를 나타냅니다.

차단 대량 (동시에 전송 된 개별 요청 목록, 아직 Google 검색을 사용하지 않는 목록)의 크기가 이전 대량에서 거부 된 요청 수에 따라 역 압박 양식을 만들었습니다. 현재 대량이 완료 될 때까지 기다렸다가 새 것을 시작합니다. 분명히 모든 거부 된 요청은 요청 큐에 다시 입력됩니다 (쿼리를 작성하는 데 필요한 데이터 형태로). 예를 들어, Elastic이 500 개의 동시 요청을 처리 할 수 ​​있고 600을 전송하면 일부는 거부되고 새로운 크기는 480 (20 % 할인)으로 줄어 듭니다.

우리가 발견 한 것은 ES가 이전에 거부 된 요청에 대해 다른 결과를 반환한다는 것입니다. 예를 들어 예상 결과와 같은 값을 반환하지만 오프셋 값은 2입니다. 주소에 1 개의 결과가 있어야하지만이 버그로 인해 주소가없는 결과도 누락됩니다.

대량 크기가 ES에서 처리 할 수있는 임계 값보다 작 으면 모든 것이 예상대로 진행되고 예상되는 결과를 얻습니다.

라이브러리의 (elastic4s) 문제인 것처럼 보이지 않습니다.

탄성 구성 : 2 CPU 32 기가 바이트의 RAM 16 기가 바이트 힙 : 5 개 파편 각 노드 당

와 2 노드. 그 외 모든 것은 기본값입니다

인터넷에서 정보를 찾을 수 없습니까?이 문제가 있습니까? 해결책은 무엇입니까? 우리가 지금까지 시도 무엇

: 벌크 사이

  • Thread.sleep 링크 위에서 알 수 있듯이.

  • 쿼리 수준에서 캐시 제거 및 인덱스에서 제거.

  • 다른 (느린) 하드웨어에서 동일한 색인을 시도합니다.

  • 문제가 (우리 코드에서) 경쟁 조건이 아닌 것으로 확인되었습니다.

업데이트 :

the query이 좋아하는 무엇

. 검색

스레드 풀 : "search" : { "type" : "fixed", "min" : 4, "max" : 4, "queue_size" : 1000 },

2 UPDATE :

우리는 또한 (가 파편에 문제라고 생각하는) 우리의 질의에 환경 설정을 시도 : .preference(Preference.Primary) 어떤 긍정적 인 결과 (심지어 그들이 있었다 전에보다 무작위로). 이 설정으로 두 번 연속 실행하면 "임의"결과가 달라 지므로 일관성이 없습니다.

답변

0

결과가 일치하지 않는 이유는 적어도 하나의 샤드가 결과가 있으면 탄성이 Success으로 응답한다는 것입니다.기본적으로 5 개의 샤드 중 하나만 성공하면 요청은 데이터의 20 %만으로도 성공적인 결과를 반환합니다.

보이는 바와 같이 herehere은 버그가 아니며 이는 기능입니다. 탄력성은 아무것도 반환하지 않고 일부 결과 (일관성이 없음에도 불구하고)를 반환하는 것을 선호합니다.

"_shards" : { "total" : 5, "successful" : 5, "failed" : 0 },

:

이 문제에 대한 해결책은 0 초과는 각각 가지고 응답 ES 다음 객체를 사용하여 일반 요청 오류로 파편을 실패 중 하나 개의 파편을 사용하는 것 또는 치료