elasticsearch NodeBuilder与TranportClient

时间:2013-03-14 00:06:35

标签: java elasticsearch

对于其他弹性搜索开发者来说可能是一个非常容易(和愚蠢)的问题,这两者之间的区别是什么?

我从Java webapp连接到远程弹性搜索服务器,到目前为止我一直在使用TransportClient,但我想知道是否可以使用NodeBuilder,或者NodeBuilder应该只用于嵌入式客户端?

如果两者中的任何一个都可用于连接远程ES服务器,哪一个在内存和性能方面应该更好?

如果有人能指出我连接到远程ES服务器的NodeBuilder示例会很棒,因为我没有任何幸运的发现。

感谢。

3 个答案:

答案 0 :(得分:28)

NodeBuilder也可用于连接群集。

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

它将作为另一个节点加入群集,并将了解整个拓扑。使用节点,您可以使用多播来发现其他正在运行的节点。

我的意见是我更喜欢使用TransportClient而不是NodeClient,因为其他群集节点在TransportClient停止时不会收到无用的信息。当NodeClient停止时,每个节点必须知道即使他们不必管理它,因为它不包含任何数据。 另外,我在调试模式中看到NodeClient比TransportCLient启动更多Threads。所以我认为TransportClient的内存占用较少。

顺便说一句,如果你使用Spring,你可以使用spring-elasticsearch工厂。如果没有,您可以随时查看源代码,了解我如何管理NodeClient与TransportClient。

希望这有帮助。

编辑2016-03-09 NodeClient不应该使用。如果需要,人们应该创建一个客户端节点(使用node.data: falsenode.master: false启动弹性搜索节点)并使用TransportClient在本地连接它。

答案 1 :(得分:18)

如果我正确理解文档,那么使用节点客户端是有益的,至少如果你有分片:

  

使用[Node]客户端的好处是运营的事实   自动路由到需要执行操作的节点   在,没有执行“双跃点”。例如,索引   操作将自动在它将结束的分片上执行   现存于。

VS

  

它[传输客户端]不加入群集,只是获得一个或多个初始   传输地址并以循环方式与它们通信   在每个动作上(虽然大多数动作可能是“两跳”   操作)。

正如我所解释的那样,使用加入集群然后使用该节点上的客户端的节点(最好将客户端设置为true),您将直接将请求发送到集群中的正确节点。

使用TransportClient,您将连接到任何节点,然后该节点将请求重定向(或可能转发请求,不确定)到正确的节点(“两跳”)

使用Node Client在网络流量和节点负载方面应该更有效率。

答案 2 :(得分:0)

此外,人们应该知道Node客户端加入了整个网状集群,并且也成为了一个代理服务器,因此其他客户端也可以连接到它,并且能够服务器插件站点,这在锁定集群时需要考虑。

节点客户端可用于进行分散收集,因此可以减轻数据节点的某些处理。

不确定传输客户端是否也会分散聚集。