【问题标题】:elasticsearch NodeBuilder vs TranportClientelasticsearch NodeBuilder vs TranportClient
【发布时间】:2013-03-02 04:29:59
【问题描述】:

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

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

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

如果有人能指出一个连接到远程 ES 服务器的 NodeBuilder 示例,那就太好了,因为我没有幸运地找到它。

谢谢。

【问题讨论】:

标签: java elasticsearch


【解决方案1】:

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。

希望这会有所帮助。

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

【讨论】:

  • 非常感谢!这正是我一直在寻找的答案!
  • 您能否再解释一下您从 2016-03-09 开始的编辑?是什么原因创建一个单独的节点而不是使用NodeClient
【解决方案2】:

如果我对文档的理解正确,那么使用 Node Client 是有好处的,至少在你有分片的情况下:

使用 [Node] 客户端的好处是操作是 自动路由到需要执行操作的节点 on,不执行“双跳”。例如,索引 操作将自动在将要结束的分片上执行 存在于。

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

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

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

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

【讨论】:

    【解决方案3】:

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

    节点客户端可用于分散收集,从而减轻数据节点的一些处理。

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

    【讨论】:

      猜你喜欢
      • 2019-09-13
      • 1970-01-01
      • 1970-01-01
      • 2023-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-14
      相关资源
      最近更新 更多