Автоматический выключатель Elasticsearch 7.x - слишком большие данные - устранение неполадок - PullRequest
2 голосов
/ 05 февраля 2020

Проблема:
После обновления с ES-5.4 до ES-7.2 я начал получать ошибки «слишком большие данные» при попытке написать параллельный массовый запрос (или / и поисковые запросы) из моего многопоточного приложения Java (с использованием клиента elasticsearch-rest-high-level-client-7.2.0.jar java) в кластер ES из 2-4 узлов.

Моя конфигурация ES:

Elasticsearch version: 7.2

custom configuration in elasticsearch.yml:   
    thread_pool.search.queue_size = 20000  
    thread_pool.write.queue_size = 500

I use only the default 7.x circuit-breaker values, such as:  
    indices.breaker.total.limit = 95%  
    indices.breaker.total.use_real_memory = true  
    network.breaker.inflight_requests.limit = 100%  
    network.breaker.inflight_requests.overhead = 2  

Ошибка изasticsearch.log:

    {
      "error": {
        "root_cause": [
          {
            "type": "circuit_breaking_exception",
            "reason": "[parent] Data too large, data for [<http_request>] would be [3144831050/2.9gb], which is larger than the limit of [3060164198/2.8gb], real usage: [3144829848/2.9gb], new bytes reserved: [1202/1.1kb]",
            "bytes_wanted": 3144831050,
            "bytes_limit": 3060164198,
            "durability": "PERMANENT"
          }
        ],
        "type": "circuit_breaking_exception",
        "reason": "[parent] Data too large, data for [<http_request>] would be [3144831050/2.9gb], which is larger than the limit of [3060164198/2.8gb], real usage: [3144829848/2.9gb], new bytes reserved: [1202/1.1kb]",
        "bytes_wanted": 3144831050,
        "bytes_limit": 3060164198,
        "durability": "PERMANENT"
      },
      "status": 429
    }

Мысли:
У меня нет времени, чтобы точно указать источник проблема.
При использовании узлов кластера ES с размером кучи <= 8 ГБ (на виртуальной машине <= 16 ГБ) проблема становится очень заметной, поэтому одно из очевидных решений заключается в увеличении памяти узлов. <br>Но я чувствую, что увеличение памяти только скрывает проблему.

Вопросы:
Я хотел бы понять, какой сценарий ios мог привести к этой ошибке?
и какие действия можно взять, чтобы правильно с ним справиться?
(изменить значения выключателя, изменить конфигурацию es.yml, изменить e / ограничить мои запросы ES)

1 Ответ

1 голос
/ 05 февраля 2020

Причина в том, что куча узла довольно переполнена и перехват прерывателя цепи хорош, потому что он предотвращает попадание узлов в OOM, устаревание и кр sh ...

Elasticsearch 6.2.0 представил автоматический выключатель и улучшил его до 7.0.0 . С обновлением версии с ES-5.4 до ES-7.2 вы сразу приступаете к этому улучшению.

Пока я вижу 3 решения:

  1. Увеличение размер кучи, если это возможно
  2. Уменьшите размер ваших массовых запросов, если это возможно
  3. Уменьшите размер кластера, поскольку осколки потребляют много кучи, не оставляя ничего для обработки большого запроса. Большее количество узлов поможет кластеру распределить фрагменты и запросы по большему количеству узлов, что приведет к более низкому использованию кучи AVG на всех узлах.

В качестве УГРОЧНОГО обходного пути (не решающего проблему) можно было бы увеличить предел после прочтения и понимания последствий :

...