Comment résoudre l'erreur 429 « es_rejected_execution_exception » dans Amazon Elasticsearch Service ?

Dernière mise à jour : 16/10/2020

Lorsque j'écris des données sur mon cluster Amazon Elasticsearch Service (Amazon ES), les demandes sont rejetées. Je reçois un message d'erreur ThreadpoolBulkRejected qui ressemble à ceci :

error":"elastic: Error 429 (Too Many Requests): rejected execution of org.elasticsearch.transport.TransportService$7@b25fff4 on 
EsThreadPoolExecutor[bulk, queue capacity = 200, org.elasticsearch.common.util.concurrent.EsThreadPoolExecutor@768d4a66[Running, 
pool size = 2, active threads = 2, queued tasks = 200, completed tasks = 820898]] [type=es_rejected_execution_exception]"

Remarque : différentes versions d'Amazon ES utilisent différents pools de threads pour traiter les appels à l'API _index . Les versions 1.5 et 2.3 d'Elasticsearch utilisent le pool de threads d'index. Les versions 5.x, 6.0 et 6.2 d'Elasticsearch utilisent le pool de threads en bloc. Elasticsearch version 6.3 et les versions ultérieures utilisent le pool de threads d'écriture.

Brève description

L'erreur es_rejected_execution_exception[bulk] est due à une mise en file d'attente en bloc. Elle se produit lorsque le nombre de requêtes adressées le cluster Elasticsearch dépasse la taille de la file d'attente en bloc (threadpool.bulk .queue_size). La file d'attente en bloc sur chaque nœud peut contenir entre 50 et 200 demandes, selon la version d'Elasticsearch que vous utilisez. Lorsque la file d'attente est pleine, les nouvelles demandes sont rejetées.

L'erreur es_rejected_execution_exception [write] est une erreur ThreadPoolWriteQueue . L’erreur es_rejected_execution_exception[write]se produit lorsque le nombre de requêtes adressées au cluster Elasticsearch dépasse threadpool.write.queue_size, la taille de la file d’attente _index. Le ThreadpoolWriteQueue sur chaque nœud peut contenir entre 50 et 200 requêtes, selon la version d'Elasticsearch que vous utilisez. Lorsque la file d'attente est pleine, les nouvelles demandes sont rejetées.

Résolution

Remarque: la taille de la file d'attente en bloc ne peut pas être augmentée dans la plupart des versions d'Amazon ES. La file d'attente existe pour une raison: elle limite les demandes à un montant gérable. Pour plus d'informations, consultez la Section Threadpool dans la documentation Elasticsearch.

Utilisez l'une des méthodes suivantes pour résoudre les erreurs es_rejected_execution_exception :

  • Ajouter plus de nœuds : chaque nœud a une file d'attente d'écriture, donc l'ajout de nœuds supplémentaires peut vous donner plus de capacité de mise en file d'attente. Pour ajouter des nœuds, consultez Configuration des domaines Amazon ES.
    Remarque : assurez-vous que vous disposez de suffisamment de fragments d'indexation actifs pour les distribuer aux nouveaux nœuds. Sinon, l'ajout de nœuds n'améliore pas votre capacité de mise en file d'attente. Une « partition d'indexation active » est une partition qui a reçu au moins une demande d'indexation au cours des cinq dernières minutes.
  • Basculer vers un type d'instance plus important : le nombre de threads dans le pool de threads sur chaque nœud pour les demandes d'écriture est égal au nombre de processeurs disponibles. Basculez vers une instance avec plus de processeurs virtuels (vCPU) pour obtenir plus de threads pour traiter les requêtes _index. Pour plus d'informations, consultez Choix des types d'instances et tests.
  • Améliorer les performances d'indexation : lorsque les documents sont indexés plus rapidement, la file d'attente d'écriture est moins susceptible d'atteindre sa capacité. Pour plus d'informations sur le réglage des performances, consultez Comment améliorer les performances d'indexation sur mon cluster Elasticsearch ?

Cet article vous a-t-il été utile ?


Besoin d'aide pour une question technique ou de facturation ?