web-dev-qa-db-fra.com

Comment réparer la lecture a expiré dans Elasticsearch

J'ai utilisé Elasticsearch-1.1.0 pour indexer les tweets . Le processus d'indexation est correct . Ensuite, j'ai mis à niveau la version. Maintenant, j'utilise Elasticsearch-1.3.2 et je reçois ce message au hasard:

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)).

Instantané du caractère aléatoire:

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

Quelqu'un peut-il indiquer comment résoudre le problème Read timed out?

Merci beaucoup.

22
Hendra Bunyamin

Il est difficile de donner une réponse directe car l’erreur que vous voyez peut être associée au client que vous utilisez. Cependant, une solution pourrait être l'une des suivantes:

1. Augmentez globalement le délai d'attente par défaut lorsque vous créez le client ES en transmettant le paramètre de délai d'attente. Exemple en Python 

es = Elasticsearch(timeout=30)

2. Définissez le délai d’exécution par demande du client. Tiré de la documentation Elasticsearch Python ci-dessous.

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

Ce qui précède donnera au cluster un peu plus de temps pour répondre

20
Skillachie

Essaye ça:

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

Cela n'échappera peut-être pas entièrement à ReadTimeoutError, mais cela les minimisera.

18
Aminah Nuraini

Pour ce que ça vaut, j'ai trouvé que cela semblait être lié à un état d'index cassé.

Il est très difficile de recréer ce problème de manière fiable, mais je l'ai vu plusieurs fois. les opérations se déroulent normalement, à l'exception de celles qui semblent bloquer périodiquement ES (en particulier l'actualisation d'un index).

La suppression d'un index (curl -XDELETE http://localhost:9200/foo) et la réindexation à partir de zéro ont résolu ce problème.

Je recommande d'effacer et de réindexer périodiquement si vous constatez ce problème. 

2
Doug

Les délais de lecture peuvent également se produire lorsque la taille de la requête est grande. Par exemple, dans le cas d’une taille d’index ES assez importante (documents> 3M), la recherche d’une requête de 30 mots prenait environ 2 secondes, tandis que celle d’une requête de 400 mots prenait plus de 18 secondes. Donc, pour une requête suffisamment grande, même timeout=30 ne vous sauvera pas. Une solution simple consiste à recadrer la requête à la taille à laquelle il est possible de répondre en dessous du délai d'attente.

0
vlyubin

L'augmentation de diverses options de délai d'attente peut résoudre immédiatement les problèmes, mais ne résout pas la cause première.

Si le service ElasticSearch est disponible et que les index sont sains, essayez d’augmenter les tailles minimale et maximale de tas Java: voir https://www.elastic.co/guide/fr/elasticsearch/reference/current/jvm-options html

TL; DR Modifier /etc/elasticsearch/jvm.options -Xms1g et -Xmx1g

0
Clever Guy