web-dev-qa-db-fra.com

elasticsearch NodeBuilder vs TranportClient

Probablement une question très facile (et stupide) à d’autres développeurs d’elasticsearch, quelle est la différence entre ces deux projets?

Je me connecte à un serveur elasticsearch distant à partir d'une application Web Java. Jusqu'à présent, j'utilisais TransportClient, mais je me demandais si NodeBuilder pouvait être utilisé, ou si NodeBuilder devait être utilisé uniquement pour les clients intégrés.

Si l’un des deux peut être utilisé pour se connecter à des serveurs ES distants, lequel devrait être meilleur en termes de mémoire et de performances?

Si quelqu'un peut me signaler un NodeBuilder se connectant à un serveur ES distant, ce serait formidable, car je n'ai pas eu la chance de le trouver.

Merci.

22
im8bit

NodeBuilder peut également être utilisé pour se connecter à un cluster.

Node node = nodeBuilder().clusterName("yourcluster").client(true).node();
Client client = node.client();

Il rejoindra le cluster en tant que autre nœud et sera au courant de la topologie complète. À l'aide de nœuds, vous pouvez utiliser la multidiffusion pour découvrir d'autres nœuds en cours d'exécution.

Mon opinion est que je préfère utiliser TransportClient que NodeClient car les autres nœuds du cluster ne recevront pas d'informations inutiles lorsque le TransportClient s'arrête. Lorsqu'un NodeClient s'arrête, chaque nœud doit savoir que même s'il n'a pas à le gérer, il ne contient aucune donnée. De plus, j'ai vu en mode débogage que NodeClient démarre plus Threads que TransportCLient. Je pense donc que TransportClient a une empreinte mémoire moindre.

En passant, si vous utilisez Spring, vous pouvez utiliser les usines spring-elasticsearch _ pour cela. Sinon, vous pouvez toujours consulter le code source pour voir comment je gère NodeClient vs TransportClient.

J'espère que cela t'aides.

EDIT 2016-03-09 : NodeClient ne doit pas être utilisé. Si cela est nécessaire, les utilisateurs doivent créer un poste client (lancer un noeud elasticsearch avec node.data: false et node.master: false) et utiliser une variable TransportClient pour s'y connecter localement.

28
dadoonet

Si j'ai bien compris la documentation, il est avantageux d'utiliser Node Client, du moins si vous avez des fragments:

L'avantage d'utiliser le client [Node] est le fait que les opérations sont automatiquement acheminées vers les nœuds sur lesquels les opérations doivent être exécutées, sans effectuer de «double saut». Par exemple, l'opération d'index sera automatiquement exécutée sur le fragment sur lequel elle finira par exister.

contre

Le [client de transport] ne rejoint pas le cluster, mais obtient simplement une ou plusieurs adresses de transport initiales et communique avec elles tour à tour à chaque action (bien que la plupart des actions seront probablement des opérations «à deux sauts»).

Lorsque j'interprète cela, en utilisant un nœud (de préférence avec le client défini sur true) qui rejoint le cluster, puis le client sur ce nœud, vous enverrez des demandes directement au nœud approprié du cluster.

À l’aide de TransportClient, vous vous connecterez à n’importe quel nœud, qui redirigera ensuite (ou transmettra éventuellement la demande, sans certitude) la demande au bon nœud ("deux sauts").

L'utilisation de Node Client devrait être plus efficace en termes de trafic réseau et de charge sur les nœuds.

18
Brimstedt

De plus, les utilisateurs doivent savoir que le client de noeud rejoint le cluster de maillage complet et devient également un proxy afin que d'autres clients puissent également s'y connecter et puissent également héberger des sites de plug-ins, à prendre en compte lors du verrouillage de votre cluster.

Le client de nœud peut être utilisé pour effectuer une collecte dispersée afin d’alléger certains traitements des nœuds de données.

Vous ne savez pas si le client de transport est également dispersé.

0
user432024