码迷,mamicode.com
首页 > 其他好文 > 详细

与Elasticsearch交互的客户端

时间:2017-12-28 00:08:12      阅读:601      评论:0      收藏:0      [点我收藏+]

标签:转发   一起   boolean   建立   transport   java客户端   last   client   外部   

1.访问ES的方式

访问es的方式有两种,一种是http方式,还有一种是java客户端方式。

其中Java客户端又分为:
1.1.Node client:

节点客户端实际上是一个集群中的节点(但不保存数据,不能成为主节点)。因为它是一个节点,它知道整个集群状态(所有节点驻留,分片分布在哪些节点,数据在集群中的具体位置等等),这意味着它可以执行 APIs 而且少了一个网络跃点。能够直接转发请求到对应的节点上。

1.2.Transport Client:

传输客户端作为一种轻量级客户端,本身不加入集群,只是简单的发送请求到远端集群中的节点,作为一个集群和应用程序之间的通信层。它知道 API 并能自动帮你在节点之间轮询,帮你嗅探集群等等。但它是集群 外部的 ,和 REST 客户端类似。我们访问的节点负责收集各节点返回的数据(query fetch merge),最后一起返回给客户端。

构造transportClient时候,需要指定sniff是否为true

if (this.settings.getAsBoolean("client.transport.sniff", false)) 
   { this.nodesSampler = new SniffNodesSampler(); } 
else { this.nodesSampler = new SimpleNodeSampler(); } 

 

这里先提一下:节点通信有5种类型:Recovery Bulk Reg State Ping

SniffNodesSampler:client会主动发现集群里的其他节点,会创建fully connect(每两个节点间建立5种连接)

SimpleNodeSampler:ping listedNodes中的所有node,区别在于这里创建的都是light connect(简单的ping和查询连接) 

 

注意:在ES7中不建议使用Transport Client,在ES8中去除Transport Client用Java High Level REST Client代替

访问远端集群,尽量以轮询方式访问目标节点

 

2.如何选择JAVA客户端
如果要将应用程序和 Elasticsearch 集群进行解耦,传输客户端是一个理想的选择。例如,如果您的应用程序需要快速的创建和销毁到集群的连接,传输客户端比节点客户端”轻”,因为它不是一个集群的一部分。类似地,如果您需要创建成千上万的连接,你不想有成千上万节点加入集群。传输客户端( TC )将是一个更好的选择。
另一方面,如果你只需要有少数的、长期持久的对象连接到集群,客户端节点可以更高效,因为它知道集群的布局。但是它会使你的应用程序和集群耦合在一起,所以从防火墙的角度,它可能会构成问题。

 

与Elasticsearch交互的客户端

标签:转发   一起   boolean   建立   transport   java客户端   last   client   外部   

原文地址:https://www.cnblogs.com/wzj4858/p/8127886.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!