searchresponse query example elastic java elasticsearch

java - query - elasticsearch NodeBuilder vs TranportClient



searchresponse elasticsearch (3)

Además, las personas deben saber que el cliente Node se une al clúster de malla completa y también se convierte en un proxy para que otros clientes puedan conectarse a él y también puedan acceder a los sitios de complementos del servidor, algo que se debe tener en cuenta al bloquear el clúster.

El cliente de nodo se puede utilizar para recopilar dispersiones, de modo que pueda aliviar algunos procesos de los nodos de datos.

No estoy seguro de si el cliente de transporte se dispersa también.

Probablemente sea una pregunta muy fácil (y tonta) para otros desarrolladores de búsqueda elástica, ¿cuál es la diferencia entre estos dos?

Me estoy conectando a un servidor elástico de búsqueda remota de una aplicación web de Java, hasta ahora he estado usando TransportClient, pero me preguntaba si NodeBuilder se puede usar, o NodeBuilder debería usarse solo para clientes integrados.

Si cualquiera de los dos se puede usar para conectarse a servidores ES remotos, ¿cuál debería ser mejor en términos de memoria y rendimiento?

Si alguien puede indicarme que un NodeBuilder se conecta a un servidor de ES remoto, el ejemplo sería genial porque no he tenido la suerte de encontrar uno.

Gracias.


NodeBuilder también se puede usar para conectarse a un clúster.

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

Se unirá al clúster como otro nodo y tendrá en cuenta toda la topología. Usando nodos, puede usar multidifusión para descubrir otros nodos en ejecución.

Mi opinión es que prefiero usar TransportClient que NodeClient porque otros nodos del clúster no recibirán información inútil cuando se detenga TransportClient. Cuando se detiene un NodeClient, cada nodo debe saberlo, incluso si no tienen que administrarlo, ya que no contiene ningún dato. Además, he visto en el modo de depuración que NodeClient inicia más Threads que TransportClient. Así que creo que TransportClient tiene una huella de memoria menor.

Por cierto, si estás usando Spring, puedes usar las fábricas spring-elasticsearch para eso. Si no, siempre puedes echarle un vistazo al código fuente para ver cómo administro NodeClient vs TransportClient.

Espero que esto ayude.

EDITAR 2016-03-09 : NodeClient no debe ser utilizado. Si es necesario, la gente debería crear un nodo cliente (lanzar un nodo node.data: false con node.data: false y node.master: false ) y usar un TransportClient para conectarse a él localmente.


Si entendí la documentación correctamente, es beneficioso usar Node Client, al menos si tiene fragmentos:

El beneficio de usar el [Node] Client es el hecho de que las operaciones se enrutan automáticamente a los nodos en los que se deben ejecutar las operaciones, sin realizar un "doble salto". Por ejemplo, la operación de índice se ejecutará automáticamente en el fragmento que terminará existiendo en.

vs

[Cliente de transporte] no se une al clúster, sino que simplemente obtiene una o más direcciones de transporte iniciales y se comunica con ellos en forma de turno rotativo en cada acción (aunque la mayoría de las acciones probablemente serán operaciones de "dos saltos").

A medida que interpreto esto, usando un nodo (preferiblemente con el cliente configurado en verdadero) que se une al clúster y luego usa el Cliente en ese nodo, enviará las solicitudes directamente al nodo correcto en el clúster.

Usando TransportClient, se conectará a cualquier nodo, que luego redireccionará (o posiblemente reenviará la solicitud, no está seguro) la solicitud al nodo correcto ("dos saltos")

El uso de Node Client debería ser más eficiente en términos de tráfico de red y carga en los nodos.