Как исправить прочтение в Elicsearch

Я использовал 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?

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

Ответы

Ответ 1

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

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

es = Elasticsearch(timeout=30)

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

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

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

Ответ 2

Попробуйте следующее:

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

Это может не полностью избежать ReadTimeoutError, но это минимизирует их.

Ответ 3

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

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

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

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

Ответ 4

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

Ответ 5

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

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

TL; DR Edit/etc/elasticsearch/jvm.options -Xms1g и -Xmx1g

Ответ 6

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