elasticsearch NodeBuilder vs TranportClient

2022-09-01 22:31:23

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

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

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

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

谢谢。


答案 1

NodeBuilder 还可用于连接到群集。

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

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

我的观点是,我更喜欢使用,而不是因为当传输客户端停止时,其他群集节点不会收到无用的信息。当NodeClient停止时,每个节点都必须知道,即使他们不必管理它,因为它不保存任何数据。另外,我已经看到在调试模式下,NodeClient比TransportCLient启动得更多。所以我认为TransportClient的内存占用量较小。TransportClientNodeClientThreads

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

希望这有帮助。

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


答案 2

如果我正确理解了文档,那么使用Node Client是有益的,至少如果你有分片:

使用 [Node] 客户端的好处是,操作会自动路由到需要执行操作的节点,而无需执行“双跃点”。例如,索引操作将自动在其最终存在的分片上执行。

It [传输客户端] 不加入群集,而只是获取一个或多个初始传输地址,并在每个操作上以轮循机制方式与它们进行通信(尽管大多数操作可能是“双跃点”操作)。

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

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

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


推荐