web-dev-qa-db-fra.com

Vitesse d'indexation lente d'Elasticsearch

Nous avons déployé ES 2.0 sur 3 nœuds EC2 c4.4xlarge (16 cœurs, 32 Go de mémoire), allouant 16 Go pour ES, attaché 500 Go avec io1/4000 IOPS sur chacun.

Problème : Nous attendons de grandes performances de cette configuration matérielle, cependant une vitesse d'indexation très lente est observé.

Notre document fait environ 10-50k, nous utilisons Java client de transport à insérer. La vitesse était correcte pour les 50 000 premiers à environ 1000/seconde, et ralentit considérablement à 100-200 /seconde.

En attendant, nous examinons la faible consommation de ressources:

  1. Le processeur est d'environ 1 à 20% seulement (processeur 16 cœurs)
  2. L'écriture d'E/S est d'environ 4 à 10 Mo/seconde uniquement
  3. La consommation de mémoire est d'environ 20-30% seulement

Exigences : Je ne peux donc pas comprendre pourquoi c'est si lent alors que tous les recours sont si gratuits, que puis-je faire pour améliorer l'efficacité? Merci.

Voici le fichier de configuration que nous utilisons:

cluster.name: {{ env }}-{{ app }}
path.data: /data/es
path.logs: /data/es-logs
network.Host: 0.0.0.0
discovery.zen.ping.unicast.hosts: ["xxxx"]
bootstrap.mlockall: true
threadpool.search.queue_size: 300
threadpool.index.type: fixed
threadpool.index.size: 16
threadpool.index.queue_size: 250000
index.refresh_interval: 1s
index.translog.flush_threshold_ops: 50000
indices.memory.index_buffer_size: 30%
indices.memory.min_shard_index_buffer_size: 12mb
indices.memory.min_index_buffer_size: 96mb
script.inline: on
script.indexed: on
http.cors.enabled: true
http.cors.allow-Origin: /https?:\/\/localhost(:[0-9]+)?/

Voici htop et iostat lors de l'exécution du travail: htop

iostat

16
PeiSong Xiong

Mettez à niveau votre ES vers la dernière version, car dans les versions récentes, ils l'ont rendue plus conviviale et la version la plus stable est maintenant la dernière 2.3

Vous pouvez essayer les choses suivantes pour accélérer l'indexation:

  1. Faites des nœuds maîtres, séparés des nœuds de données car cela réduira la charge sur tout votre cluster.
  2. Désactivez la permutation du système d'exploitation, ES s'en charge et vérifiez la taille de votre tas sur toutes vos machines Taille du tas
  3. Vérifiez que vos documents sont toujours de taille similaire, vous pouvez utiliser l'indexation en masse et modifier vos paramètres comme chunk_size en nombre d'enregistrements ou en taille de mémoire
  4. Si vous utilisez un script, essayez d'optimiser cela car ils ralentissent l'indexation, vous pouvez stocker la valeur scriptée si possible en tant que prétraitement, car ES n'est pas conçu pour gérer les scripts.
  5. Vérifiez le nombre de fragments par nœud et essayez d'équilibrer cela entre les nœuds à l'aide du routage
  6. En savoir plus sur la façon dont les gars ES suggèrent que le système prêt à fonctionner fonctionne Elasticsearch in Production
  7. Un autre blog sur l'augmentation des performances de l'indexation Elasticsearch Considérations relatives aux performances pour l'indexation Elasticsearch

Vérifiez cette réponse pour un moyen optimal de configurer ELK Stack sur trois serveurs. Manière optimale de configurer la pile ELK sur trois serveurs

11
Sumit Kumar