ES-客户端
创始人
2025-06-01 20:23:42
0

语言无关性

  • Java REST Client
  • Java API
  • Python API
  • Go API
  • .Net API
  • PHP API
  • JavaScripts API
  • Ruby API
  • Perl API
  • Eland
  • Rust
  • Community Contributed Clients

Java API
生命周期(生卒年:ES 0.9 - ES 7.x)
Java API使用的客户端名称叫TransportClient,从7.0.0开始,官方已经不建议使用TransportClient作为ES的Java客户端了,并且从8.0会被彻底删除。

注意事项
TransportClient 使用transport模块(9300端口)远程连接到 Elasticsearch 集群,客户端并不加入集群,而是通过获取单个或者多个transport地址来以轮询的方式与他们通信。
TransportClient使用transport协议与Elasticsearch节点通信,如果客户端的版本和与其通信的ES实例的版本不同,就会出现兼容性问题。而low-level REST使用的是HTTP协议,可以与任意版本ES集群通信。high-level REST是基于low-level REST的。
Maven依赖

 org.elasticsearch.client transport 			     7.12.1 

使用

// 创建客户端连接 
TransportClient client = new PreBuiltTransportClient(Settings.EMPTY) 
.addTransportAddress(new TransportAddress(InetAddress.getByName("host1"), 9300)) 
.addTransportAddress(new TransportAddress(InetAddress.getByName("host2"), 9300));
// 关闭客户端 client.close(); ```

嗅探器

Settings settings = Settings.builder().put("client.transport.sniff", true).build(); 
TransportClient client = new PreBuiltTransportClient(settings);

Java REST Client
RestClient 是线程安全的,RestClient使用 Elasticsearch 的 HTTP 服务,默认为9200端口,这一点和transport client不同。
生命周期(ES 5.0.0-alpha4至今)
Java Low-level REST client
第一个 5.0.0 版 Java REST 客户端,之所以称为低级客户端,是因为它几乎没有帮助 Java 用户构建请求或解析响应。它处理请求的路径和查询字符串构造,但它将 JSON 请求和响应主体视为必须由用户处理的不透明字节数组。

特点

  • 与任何 Elasticsearch 版本兼容

ES 5.0.0只是发布第一个Java Low-level REST client时的ES版本(2016年),不代表其向前只兼容到5.0,Java Low-level REST client基于Apache HTTP 客户端,它允许使用 HTTP 与任何版本的 Elasticsearch 集群进行通信。

  • 最小化依赖
  • 跨所有可用节点的负载平衡
  • 在节点故障和特定响应代码的情况下进行故障转移
  • 连接失败惩罚(是否重试失败的节点取决于它连续失败的次数;失败的尝试越多,客户端在再次尝试同一节点之前等待的时间就越长)
  • 持久连接
  • 请求和响应的跟踪记录
  • 可选的集群节点自动发现(也称为嗅探)

Maven依赖

 org.elasticsearch.client elasticsearch-rest-client 7.12.0 

初始化

RestClient restClient = RestClient.builder(new HttpHost("localhost1", 9200, 
"http"), new HttpHost("localhost2", 9200, "http")).build();

资源释放
restClient.close();

嗅探器

允许从正在运行的 Elasticsearch 集群中自动发现节点并将它们设置为现有 RestClient 实例的最小库。

Maven依赖

 org.elasticsearch.client elasticsearch-rest-client-sniffer 7.12.1 

代码

//默认每五分钟发现一次 
RestClient restClient = RestClient.builder(
new HttpHost("localhost", 9200, "http")) .build(); 
Sniffer sniffer = Sniffer.builder(restClient).build();

资源释放
Sniffer 对象应该与RestClient 具有相同的生命周期,并在客户端之前关闭。

java sniffer.close(); 
restClient.close();

设置嗅探间隔

RestClient restClient = RestClient.builder( 
new HttpHost("localhost", 9200, "http")) .build(); 
// 设置嗅探间隔为60000毫秒 
Sniffer sniffer = Sniffer.builder(restClient) 
.setSniffIntervalMillis(60000).build();

失败时重启嗅探
启用失败时嗅探,也就是在每次失败后,节点列表会立即更新,而不是在接下来的普通嗅探轮中更新。在这种情况下,首先需要创建一个 SniffOnFailureListener 并在 RestClient 创建时提供。此外,一旦稍后创建嗅探器,它需要与同一个 SniffOnFailureListener 实例相关联,它将在每次失败时收到通知,并使用嗅探器执行额外的嗅探轮

SniffOnFailureListener sniffOnFailureListener = new SniffOnFailureListener(); 
RestClient restClient = RestClient.builder( 
new HttpHost("localhost", 9200)).setFailureListener(sniffOnFailureListener) 
.build(); 
Sniffer sniffer = Sniffer.builder(restClient) 
//在嗅探失败时,不仅节点在每次失败后都会更新,
而且还会比平常更早安排额外的嗅探轮次,默认情况下是在失败后一分钟,
假设事情会恢复正常并且我们想要检测尽快地。可以在 Sniffer 创建时通过setSniffAfterFailureDelayMillis 方法自定义所述间隔。
请注意,如果如上所述未启用故障嗅探,则最后一个配置参数无效。
.setSniffAfterFailureDelayMillis(30000) 
.build(); 
//将 Sniffer 实例设置为失败侦听器
sniffOnFailureListener.setSniffer(sniffer); 

Java High Level REST Client
生命周期(ES 5.0.0-alpha4至今)

Java 高级 REST 客户端在 Java 低级 REST 客户端之上运行。它的主要目标是公开 API 特定的方法,接受请求对象作为参数并返回响应对象,以便请求编组和响应解组由客户端本身处理。要求Elasticsearch版本为2.0或者更高。
客户端优缺点及兼容性建议
阅读:https://www.elastic.co/cn/blog/benchmarking-rest-client-transport-client
Java API

  • 优点:
    性能略好:
    吞吐量大:Transport Client的批量索引吞吐量比HTTP 客户端大 4% 到 7%(实验室条件)
  • 缺点:
    重依赖:并非单独意义上的“客户端”,其依赖于lucene、log4j2等,可能会产生依赖冲突
    不安全:Java API通过传输层调用服务,不安全。
    重耦合:和ES核心服务有共同依赖,版本兼容性要求高。

REST API
优点

  • 安全:REST API使用单一的集群入口点,可以通过 HTTPS 保障数据安全性,传输层只用于内部节点到节点的通信。

  • 易用:客户端只通过 REST 层而不是通过传输层调用服务,可以大大简化代码编写 缺点

  • 性能略逊于Java API,但是差距不大

缺点

  • 性能略逊于Java API,但是差距不大
    - Low level Client
    优点:
    轻依赖:Apache HTTP 异步客户端及其传递依赖项(Apache HTTP 客户端、Apache HTTP Core、Apache HTTP Core NIO、Apache Commons Codec 和 Apache Commons Logging)
    兼容性强:兼容所有ES版本
    缺点:
    功能少:显而易见,轻量化带来的必然后果
    - High level Client
    优点:
    功能强大:支持所有ES的API调用。
    松耦合:客户端和ES核心服务完全独立,无共同依赖。
    接口稳定:REST API 比与 Elasticsearch 版本完全匹配的Transport Client接口稳定得多。
    缺点:
    兼容性中等:基于Low Level Client,只向后兼容ES的大版本,比如6.0的客户端兼容6.x(即6.0之后的版本),但是6.1的客户端未必支持所有6.0ES的API,但是这并不是什么大问题,咱们使用相同版本的客户端和服务端即可,而且不会带来其他问题。

在这里插入图片描述

相关内容

热门资讯

电视安卓系统哪个品牌好,哪家品... 你有没有想过,家里的电视是不是该升级换代了呢?现在市面上电视品牌琳琅满目,各种操作系统也是让人眼花缭...
安卓会员管理系统怎么用,提升服... 你有没有想过,手机里那些你爱不释手的APP,背后其实有个强大的会员管理系统在默默支持呢?没错,就是那...
安卓系统软件使用技巧,解锁软件... 你有没有发现,用安卓手机的时候,总有一些小技巧能让你玩得更溜?别小看了这些小细节,它们可是能让你的手...
安卓系统提示音替换 你知道吗?手机里那个时不时响起的提示音,有时候真的能让人心情大好,有时候又让人抓狂不已。今天,就让我...
安卓开机不了系统更新 手机突然开不了机,系统更新还卡在那里,这可真是让人头疼的问题啊!你是不是也遇到了这种情况?别急,今天...
安卓系统中微信视频,安卓系统下... 你有没有发现,现在用手机聊天,视频通话简直成了标配!尤其是咱们安卓系统的小伙伴们,微信视频功能更是用...
安卓系统是服务器,服务器端的智... 你知道吗?在科技的世界里,安卓系统可是个超级明星呢!它不仅仅是个手机操作系统,竟然还能成为服务器的得...
pc电脑安卓系统下载软件,轻松... 你有没有想过,你的PC电脑上安装了安卓系统,是不是瞬间觉得世界都大不一样了呢?没错,就是那种“一机在...
电影院购票系统安卓,便捷观影新... 你有没有想过,在繁忙的生活中,一部好电影就像是一剂强心针,能瞬间让你放松心情?而我今天要和你分享的,...
安卓系统可以写程序? 你有没有想过,安卓系统竟然也能写程序呢?没错,你没听错!这个我们日常使用的智能手机操作系统,竟然有着...
安卓系统架构书籍推荐,权威书籍... 你有没有想过,想要深入了解安卓系统架构,却不知道从何下手?别急,今天我就要给你推荐几本超级实用的书籍...
安卓系统看到的炸弹,技术解析与... 安卓系统看到的炸弹——揭秘手机中的隐形威胁在数字化时代,智能手机已经成为我们生活中不可或缺的一部分。...
鸿蒙系统有安卓文件,畅享多平台... 你知道吗?最近在科技圈里,有个大新闻可是闹得沸沸扬扬的,那就是鸿蒙系统竟然有了安卓文件!是不是觉得有...
宝马安卓车机系统切换,驾驭未来... 你有没有发现,现在的汽车越来越智能了?尤其是那些豪华品牌,比如宝马,它们的内饰里那个大屏幕,简直就像...
p30退回安卓系统 你有没有听说最近P30的用户们都在忙活一件大事?没错,就是他们的手机要退回安卓系统啦!这可不是一个简...
oppoa57安卓原生系统,原... 你有没有发现,最近OPPO A57这款手机在安卓原生系统上的表现真是让人眼前一亮呢?今天,就让我带你...
安卓系统输入法联想,安卓系统输... 你有没有发现,手机上的输入法真的是个神奇的小助手呢?尤其是安卓系统的输入法,简直就是智能生活的点睛之...
怎么进入安卓刷机系统,安卓刷机... 亲爱的手机控们,你是否曾对安卓手机的刷机系统充满好奇?想要解锁手机潜能,体验全新的系统魅力?别急,今...
安卓系统程序有病毒 你知道吗?在这个数字化时代,手机已经成了我们生活中不可或缺的好伙伴。但是,你知道吗?即使是安卓系统,...
奥迪中控安卓系统下载,畅享智能... 你有没有发现,现在汽车的中控系统越来越智能了?尤其是奥迪这种豪华品牌,他们的中控系统简直就是科技与艺...