HCL Commerce Version 9.1.8.0 or later

Optimisation de la génération d'index et du flux global

Des optimisations sont fournies pour les générations d'index complètes et pour les paramètres d'optimisation. Les améliorations potentielles qui peuvent être implémentées pour les mises à jour d'index en quasi-temps réel (NRT) ne sont pas décrites.

Le processus de génération d'index

Une génération d'index complète se compose de trois étapes principales : extraction de données, traitement de données et chargement de données. Il existe plusieurs connecteurs prédéfinis, qui se composent de plusieurs groupes de processus à des fins différentes. Généralement, chaque groupe de processus contient des sous-groupes de processus pour gérer les étapes d'extraction, de traitement et de chargement des données associées au processus de génération.

  • Extraction de groupe de données : extrayez des données de la base de données ou d'Elasticsearch.
  • Traitement de groupe de données : en fonction des données extraites, générez, mettez à jour et/ou copiez les documents d'index.
  • Chargement du groupe de données : chargez le document d'index dans Elasticsearch. A partir de l'édition 9.1.3.0 d'HCL Commerce, chaque index a un groupe associé.

Optimisation

En règle générale, les paramètres par défaut fonctionnent pour ce processus, mais la finalisation du processus d'indexation pour un jeu de données de grande taille peut prendre un certain temps. En fonction de la taille du jeu de données et de la configuration matérielle (mémoire, UC, disque et réseau), des améliorations peuvent être apportées aux sous-groupes et aux groupes de processus afin que les flux de processus soient plus rapides et plus efficaces au sein des sous-groupes et entre les sous-groupes connectés.

Extraction de groupe de données

Dans ce groupe, il existe trois sources différentes dont les données peuvent être extraites.

Les données peuvent être :
  • extraites d'une base de données avec défilement SQL ;
  • extraites d'une base de données avec SQL sans défilement ;
  • extraites d'Elasticsearch avec défilement.
Extraire des données d'une base de données avec défilement SQL
Accédez au groupe SCROLL SQL, puis cliquez avec le bouton droit de la souris sur la zone de conception de base et sélectionnez des variables.
  • scroll.page.size est le nombre de lignes extraites de la base de données par le SQL.
  • scroll.bucket.size est le nombre de lignes des données extraites dans chaque compartiment pour traitement. bucket.size détermine la taille des fichiers de flux (et le nombre de documents contenus dans chaque fichier).

Modifiez les valeurs de scroll.bucket.size et scroll.page.size en fonction des considérations suivantes :

  • • Selon la taille du catalogue, le SQL peut prendre un certain temps pour renvoyer les données de réponse vers NiFi. L'objectif de SQL de défilement est de limiter la taille des données qui peuvent être traitées dans NiFi en même temps, afin d'éviter les erreurs de mémoire sur les catalogues de grande taille.
  • • Les paramètres de défilement sont optimaux lorsque le temps qu'il faut pour traiter les données est égal au temps que le défilement suivant du SQL prend pour recevoir ses données. Grâce à cette optimisation, le traitement inutile ou le retard d'E/S est réduit.
  • • La sortie d'un sous-groupe est transmise tour à tour au sous-groupe de processus connecté suivant. Ce processus doit faire l'objet d'un audit pour s'assurer qu'il n'y a pas de goulot d'étranglement qui peut avoir un impact sur l'efficacité du processus global.
Extraire les données de la base de données avec SQL sans défilement

Dans le groupe de processus, le jeu de données est extrait de la base de données à l'aide d'un flux SQL unique. Par exemple, le Find Associations sur DatabaseProductStage1b.

Accédez au groupe Processeur que nous optimisons, cliquez avec le bouton droit de la souris sur la zone de conception de base et sélectionnez des variables.

Définissez le paramètre scroll.bucket.size sur le nombre que vous souhaitez.

scroll.bucket.size est le nombre de lignes des données extraites qui sont placées dans chaque compartiment pour traitement. bucket.size détermine la taille des fichiers de flux (et le nombre de documents contenus dans chaque fichier).

Extraire des données d'Elasticsearch

Etant donné que la création d'index est un processus par étape, certaines informations peuvent être ajoutées aux documents d'index existants. Dans ce cas, NiFi doit extraire des données d'Elasticsearch. Prenons l'exemple de l'étape 2 de l'URL.

Accédez au groupe SCROLL Elasticsearch, cliquez avec le bouton droit de la souris sur la zone de conception de base et sélectionnez des variables.

Modifiez scroll.bucket.size et scroll.page.size sur les valeurs que vous souhaitez, en fonction des considérations suivantes :

scroll.page.size est le nombre de documents extraits d'Elasticsearch. Si ce nombre est trop petit, NiFi doit établir davantage de connexions à Elasticsearch.

scroll.bucket.size est le nombre de documents provenant des données extraites dans chaque compartiment pour traitement. bucket.size détermine la taille des fichiers de flux (et le nombre de documents contenus dans chaque fichier).

Un autre paramètre utile pour le réglage est scroll.duration. Cette valeur définit la durée pendant laquelle Elasticsearch stockera l'ensemble des résultats de la requête en mémoire. Ce paramètre est utile lorsque vous traitez de nombreux magasins et langues qui s'exécutent en parallèle, où une erreur de fin de défilement peut être rencontrée. Cette erreur indique que vous n'avez plus d'espace de défilement et que la réduction de la durée de défilement force Elasticsearch à libérer plus rapidement des mémoires tampons anciennes ou obsolètes. A l'inverse, l'augmentation de la durée de défilement dans Elasticsearch pour cet index fournira du temps supplémentaire pour terminer les opérations de traitement.

Traitement de groupe de données

Dans l'exemple suivant, le groupe de processus DatabaseProductStage 1a est utilisé.

Accédez à Créer un document de produit à partir de la base de données, cliquez avec le bouton droit de la souris sur Créer un document de produit à partir de la base de données et sélectionnez Configurer. Sous l'onglet PLANIFICATION, mettez à jour la valeur Tâches simultanées pour définir le nombre de threads qui seront utilisés pour le groupe de processus. Lors de l'augmentation du nombre de tâches simultanées, l'utilisation de la mémoire pour le groupe de processus est également augmentée en conséquence. Par conséquent, définir cette valeur sur un nombre supérieur au nombre d'UC allouées au pod, ou au-delà de la quantité de mémoire allouée au pod, peut ne pas être logique et avoir un impact négatif sur les performances.

Chargement de groupe de documents

Accédez au groupe Bulk Elasticsearch. Plusieurs processus sont affichés. Cliquez avec le bouton droit de la souris sur chaque processus et sélectionnez Configurer. Sous l'onglet PLANIFICATION, mettez à jour les valeurs Tâches simultanées sur des valeurs logiques pour votre environnement.

Le processeur Post Bulk Elasticsearch envoie les documents d'index créés à Elasticsearch. Par défaut, Elasticsearch utilisera le même nombre d'UC que le nombre de connexions. Compte tenu du retard ou des pools possibles, le nombre qui est défini pour le processeur Post Bulk Elasticsearch peut être supérieur au nombre d'UC allouées au pod Elasticesearch.

Il est recommandé de considérer tous les processus d'un groupe ensemble. En général, il est préférable d'essayer de faire en sorte que les processus ultérieurs se terminent plus rapidement que les précédents. Sinon, les objets mis en file d'attente consomment de la mémoire supplémentaire et ralentissent l'efficacité globale du traitement.

Considérations générales pour l'optimisation

L'objectif général de l'optimisation est de traiter et de stocker le plus de données pendant une période donnée, compte tenu des ressources d'un système configuré et de leur utilisation. En général, nous pouvons optimiser et améliorer les domaines suivants :
Tâches/Threads simultanés
L'augmentation du nombre de threads qui sont traitées peut aider à améliorer le débit d'un groupe de traitement, mais cela doit être évalué avec soin.
  • N'utilisez pas de processeurs multitâches qui utilisent le défilement pour obtenir des données à partir de la base de données ou d'Elasticsearch. Etant donné que l'approche de défilement est utilisée pour charger par lots les données dans les tailles les plus adaptées, le traitement multitâche aurait un impact négatif sur l'efficacité globale du traitement du système.
  • Envisagez d'augmenter la taille des compartiments pour les processeurs multitâches qui envoient des mises à jour en masse à Elasticsearch ou effectuent des lecture simples à partir d'Elasticsearch.
  • Plus de tâches/de threads simultanés consomment naturellement plus de mémoire et de ressources vCPU.
  • Si le coût des ramasse-miettes de mémoire est élevé, vous devrez peut-être réduire le nombre simultané de threads ou ajouter des ressources de mémoire supplémentaires.
  • • Surveillez tous les serveurs (base de données, NiFi et Elasticsearch) pendant le processus Ingest pour trouver le goulot d'étranglement dans le pipeline.
Taille du compartiment/Taille du fichier de flux
L'augmentation de la taille du compartiment augmente la taille du fichier de flux, c'est-à-dire le nombre de documents qui sont traités en tant que groupe dans NiFi. Plus le fichier de flux est grand, meilleure est l'efficacité. Toutefois, des ressources limitées du système d'exploitation limiteront la taille maximale du fichier de flux.
  • L'optimisation de la taille du fichier de flux est très visible et a un impact sur le système.
  • Les fichiers de flux de grande taille ont plusieurs effets secondaires négatifs :
    • Ils demandent un segment de mémoire important pour NiFi.
    • Ils nécessitent un entonnoir correspondant sur Elasticsearch, pour accepter les données au moment où elles sont acheminées.
  • Le temps système GC de NiFi peut devenir excessivement élevé ou NiFi peut arriver à court d'espace de segment avec une erreur Out of Memory.
Pression arrière dans les liens entre les processus, les groupes de processus et les sous-groupes de processus
Dans le pipeline, il existe de nombreux liens entre les étapes. Chaque lien dispose de sa propre file d'attente pour les objets résultants (articles mis en file d'attente) à traiter à l'étape suivante.
Le lien est un emplacement qui peut être utilisé pour identifier le goulot d'étranglement d'un processus ou d'un groupe de processus. Si un lien possède un grand nombre d'articles en file d'attente, le processus suivant sera le goulot d'étranglement. Ceci est particulièrement vrai pour les générations de plus longue durée.
Par exemple, le lien suivant a 451 articles en file d'attente pour le processus Analyser la réponse SQL fructueuse.
La pression arrière est un seuil de configuration qui contrôle la vitesse de transmission globale des données. Ce seuil indique la quantité de données qui doivent être autorisées à exister dans la file d'attente avant que le composant (processeur ou groupe de processeurs) qui produit les données dans la file d'attente ne soit plus programmé pour s'exécuter. Ceci vise à éviter que le système ne soit dépassé par des données en mouvement.
NiFi fournit deux éléments de configuration pour contrôler la pression arrière :
  • Seuil d'objet de pression arrière - Nombre d'objets qui peuvent se trouver dans la file d'attente avant l'application du contrôle de la pression arrière.
  • Seuil de taille de la pression arrière - Spécifie la taille des objets qui peuvent se trouver dans la file d'attente avant l'application du contrôle de la pression arrière.
Si vous utilisez généralement des documents, utilisez le seuil d'objet de pression arrière pour contrôler la pression arrière. Pour le configurer, cliquez avec le bouton droit de la souris sur le lien et sélectionnez Afficher la configuration.
Les valeurs Seuil d'objet de pression arrière et Seuil de taille de la pression arrière peuvent être définies à partir de leurs valeurs par défaut.