Как исправить тайм-аут чтения в Elasticsearch

Я использовал Elasticsearch-1.1.0 для индексации твитов. Процесс индексации идет нормально. Потом обновил версию. Теперь я использую Elasticsearch-1.3.2 и случайно получаю это сообщение:

Exception happened: Error raised when there was an exception while talking to ES.
ConnectionError(HTTPConnectionPool(host='127.0.0.1', port=8001): Read timed out. (read timeout=10)) caused by: ReadTimeoutError(HTTPConnectionPool(host='127.0.0.1', port=8001): Read timed out. (read timeout=10)).

Снимок случайности:

Happened --33s-- Happened --27s-- Happened --22s-- Happened --10s-- Happened --39s-- Happened --25s-- Happened --36s-- Happened --38s-- Happened --19s-- Happened --09s-- Happened --33s-- Happened --16s-- Happened 

--XXs-- = after XX seconds

Может ли кто-нибудь указать, как решить проблему Read timed out?

Большое спасибо.


person Hendra Bunyamin    schedule 18.09.2014    source источник


Ответы (7)


Трудно дать прямой ответ, поскольку ошибка, которую вы видите, может быть связана с используемым вами клиентом. Однако решение может быть одним из следующих:

1. Глобально увеличьте тайм-аут по умолчанию при создании клиента ES, передав параметр тайм-аута. Пример на Питоне

es = Elasticsearch(timeout=30)

2. Установите тайм-аут для каждого запроса, сделанного клиентом. Взято из документации Elasticsearch Python ниже.

# only wait for 1 second, regardless of the client's default
es.cluster.health(wait_for_status='yellow', request_timeout=1)

Вышеприведенное даст кластеру дополнительное время для ответа.

person Skillachie    schedule 02.12.2014
comment
У меня похожая проблема, я увеличил тайм-аут до 60 секунд и все еще получаю тайм-ауты. Я думаю, вопрос в том, почему эластичный поиск так долго отвечает? - person digitaldavenyc; 31.01.2016
comment
Зависит от самых разных причин. У вас есть правильные индексы? Возможно, вам придется опубликовать новый вопрос. - person Skillachie; 01.02.2016
comment
Есть ли новый вопрос об основной причине? Я вижу ту же проблему, и мне интересно, в чем основная причина того, что elasticsearch долго не отвечает. - person Suanmeiguo; 06.09.2016

Попробуй это:

es = Elasticsearch(timeout=30, max_retries=10, retry_on_timeout=True)

Возможно, он не полностью избежит ReadTimeoutError, но сведет их к минимуму.

person Aminah Nuraini    schedule 09.02.2016
comment
Эта уверенность помогла. Спасибо! - person Chev_603; 12.09.2020

Что бы это ни стоило, я обнаружил, что это, похоже, связано с неработающим состоянием индекса.

Очень сложно достоверно воссоздать эту проблему, но я видел ее несколько раз; операции выполняются как обычно, за исключением некоторых, которые периодически зависают ES (кажется, в частности, обновление индекса).

Удаление индекса (curl -XDELETE http://localhost:9200/foo) и переиндексация с нуля исправили это для меня.

Я рекомендую периодически очищать и переиндексировать, если вы видите такое поведение.

person Doug    schedule 16.09.2016
comment
это слишком дорого, если у вас есть только небольшие данные. - person Sinux; 30.08.2018
comment
Я тоже это заметил с ES 6.5. К сожалению, периодическая переиндексация не подходит для меня. - person rubik; 02.01.2019

Тайм-ауты чтения также могут возникать при большом размере запроса. Например, в моем случае с довольно большим размером индекса ES (> 3M документов) поиск запроса из 30 слов занял около 2 секунд, а поиск запроса из 400 слов занял более 18 секунд. Так что для достаточно большого запроса даже timeout=30 вас не спасет. Простое решение — обрезать запрос до размера, на который можно ответить до истечения времени ожидания.

person vlyubin    schedule 10.01.2019

Увеличение различных параметров времени ожидания может немедленно решить проблемы, но не устраняет основную причину.

Если служба ElasticSearch доступна и индексы исправны, попробуйте увеличить минимальный и максимальный размеры кучи Java: см. https://www.elastic.co/guide/en/elasticsearch/reference/current/jvm-options.html .

TL;DR Изменить /etc/elasticsearch/jvm.options -Xms1g и -Xmx1g

person Nomen Nescio    schedule 21.12.2018

Вы также должны проверить, все ли в порядке с резинкой. Какой-то шард может быть недоступен, вот хороший документ о возможных причинах недоступности шарда https://www.datadoghq.com/blog/elasticsearch-unassigned-shards/

person Ryabchenko Alexander    schedule 19.08.2019
comment
+1 - недавно мы столкнулись с этой проблемой, и причиной тайм-аута для нас была недоступность сегмента из-за нехватки места на диске на машине stackoverflow. com/a/64117534/1526703 - person Anupam; 29.09.2020

На всякий случай кто-то еще попробовал все здесь, и ничего не сработало...

Разделите проблему на две части, проверьте, действительно ли с Elasticsearch все в порядке, попробуйте выполнить любую из приведенных ниже команд в командной строке:

curl localhost:9200/_cat/indices
curl -XGET 'http://localhost:9200/_cluster/state?pretty'

В случае, если они не сработали (значит, Python не имеет ничего общего), проверьте файл /etc/elasticsearch.yaml (конфигурация в Ubuntu, в данном случае упакованная). возможно файл плохо сконфигурирован (у меня так было из-за старых экспериментов). Попробуйте все закомментировать и проверить команды еще раз, потом, если заработало, значит возвращайтесь на Python.

person Ualter Jr.    schedule 03.04.2020