<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          干貨 | Elasticsearch Java 客戶端演進(jìn)歷史和選型指南

          共 5132字,需瀏覽 11分鐘

           ·

          2022-06-17 16:31

          1、Elasticsearch java 客戶端為什么要選型?

          Elasticsearch 官方提供了很多版本的 Java 客戶端,包含但不限于:

          • Transport 客戶端
          • Java REST 客戶端
          • Low Level REST 客戶端
          • High Level REST 客戶端
          • Java API 客戶端

          非官方的 Java 客戶端,包含但不限于:

          • Jest 客戶端
          • BBoss 客戶端
          • Spring Data Elasticsearch 客戶端 ......

          寫出來的就接近十款客戶端!

          Elasticsearch  java 客戶端各個(gè)版本的發(fā)展演進(jìn)歷史、選擇哪個(gè)、如何選擇是本篇文章要解決的問題。

          2、Elasticsearch 官方 Java 客戶端演進(jìn)史

          2.1 Elasticsearch Transport 客戶端

          Elasticsearch Transport 客戶端生命周期:Elasticsearch 0.9 版本(2010年7月27日)生,Elasticsearch 7.0.0版本(2019年04月10日)棄用,Elasticsearch 8.0 版本(2022年02月11日)徹底移除(removed)。

          Transport 客戶端使用 Elasticsearch 傳輸協(xié)議(transport protocol of Elasticsearch)和 Elasticsearch 通信。

          Elasticsearch 傳輸協(xié)議也就是大家熟知的 9300 端口通信的那個(gè)協(xié)議,該協(xié)議負(fù)責(zé)節(jié)點(diǎn)之間互相通信的。如果客戶端的版本與集群版本不一致可能出現(xiàn)兼容性問題。

          本文介紹的所有客戶端中,僅 Transport 客戶端使用的是 Elasticsearch 傳輸協(xié)議,其他客戶端都是 Http 協(xié)議。

          更加通俗一點(diǎn)說:僅有 Transport 客戶端使用 9300 端口(默認(rèn)),其他都是 9200 端口(默認(rèn))。

          Transport 客戶端缺點(diǎn):

          • 和JVM、集群版本緊密耦合。
          • 安全性差。

          https://www.elastic.co/guide/en/elasticsearch/client/java-api/0.90/java-api.html

          https://www.elastic.co/cn/blog/the-elasticsearch-java-high-level-rest-client-is-out

          2.2 Elasticsearch Java REST 客戶端

          Java REST Client 發(fā)布版本:5.0 版本(2016年10月26日)。

          官方對(duì) Java REST Client 的解讀為:Elasticsearch 的官方“低級(jí)“客戶端。允許通過 http 協(xié)議與 Elasticsearch 集群通信。與所有 Elasticsearch 版本兼容。

          官方醒目的標(biāo)記了“deprecated”已棄用。

          Transport 客戶端,Java REST 客戶端特點(diǎn)如下:

          • 耦合性低;
          • 具有更少的依賴項(xiàng);
          • 應(yīng)用程序更加輕量級(jí)。

          在 Elasticsearch 5.6 版本(2017年9月12日)的時(shí)候,REST 客戶端衍生為兩種:

          • Java Low Level REST 客戶端

          • Java High Level REST 客戶端

          https://www.elastic.co/guide/en/elasticsearch/client/java-rest/5.0/index.html

          2.2.1 Java Low Level REST 客戶端

          Low Level Rest 5.6 版本(2017年9月11日)單獨(dú)分割出來,之前統(tǒng)一叫:Java REST 客戶端。

          Elasticsearch 官方“低級(jí)”客戶端,官方強(qiáng)調(diào)的一個(gè)特點(diǎn):它與所有 Elasticsearch 版本兼容。

          注意:下文提到的 High Level REST 客戶端已被廢棄,但是:Low Level REST 客戶端到 8.X 版本依然健在。

          https://stackoverflow.com/questions/62340904/elasticsearch-rest-high-level-client-vs-elasticsearch-rest-client

          2.2.2  Java High Level REST 客戶端

          High Level REST 客戶端 5.6.0 版本(2017年9月11日)推出,已于 7.15.0 版本(2021年09月22日)廢棄。

          Elasticsearch 官方“高級(jí)“客戶端 基于 Low Level REST 客戶端,并擴(kuò)展了 Low Level REST 客戶端 的類和接口。

          Java High Level REST 客戶端較 Low Level REST 客戶端的優(yōu)勢(shì)如下:

          • 優(yōu)勢(shì)1:代碼的可維護(hù)性和可讀性強(qiáng)。

          舉個(gè)例子:發(fā)送請(qǐng)求的代碼,看如下兩種客戶端不同寫法。

          Low Level REST 客戶端寫法如下:

          Request request = new Request("GET""/posts/_search");

          High Level Rest 客戶端寫法如下:

          SearchRequest searchRequest = new SearchRequest("posts"); 

          可以看出,Low Level REST 方式相對(duì)“原始”、“笨拙”。

          使用 High Level Rest 客戶端上工作就像在 Elasticsearch 的 API 層(通過 HTTP 包間接工作),而Low Level REST 客戶端純粹是在 HTTP 上工作,什么都得自己構(gòu)造。

          • 優(yōu)勢(shì)2:更加便捷。

          幫助開發(fā)人員像使用 Kibana 一樣關(guān)聯(lián) ES API 使用。

          • 優(yōu)勢(shì)3:XPack 高階功能 High Level 自動(dòng)包含,無需使用 Low Level 自己重寫。

          舉個(gè)通俗的例子,直接看圖。


          VS


          兩個(gè)圖一對(duì)比就更明顯了,Low Level REST 客戶端 什么都得自己來,High Level REST 客戶端都封裝好了,我們吃“現(xiàn)成”的。

          https://www.elastic.co/guide/en/elasticsearch/client/java-rest/5.6/java-rest-high.html

          2.3 Elasticsearch Java API Client

          7.16 版本(2021年12月8日)推出 Elasticsearch Java API Client。

          值得注意的是:7.17 版本的 High Level REST 客戶端可以與 8.X 版本以兼容模式運(yùn)行。

          其實(shí)大家可能和我一樣都有疑問:High Level 不香嗎?為啥還要換?

          其實(shí)官方在“ElasticCC: The new Elasticsearch Java Client: getting started and behind the scenes”給出了詳盡的解讀。

          概括如下:

          • 1、High Level REST 客戶端“太重”。

          相關(guān)依賴超過 30 MB,且很多都是非必要相關(guān)的。

          api 暴露了很多服務(wù)器內(nèi)部接口。

          • 2、High Level REST 一致性差。

          仍需要大量的維護(hù)工作。

          • 3、High Level REST 客戶端沒有集成 json/object 類型映射。

          仍需要自己借助字節(jié)緩存區(qū)實(shí)現(xiàn)。

          https://github.com/elastic/elasticsearch-java

          Elasticsearch Java API 客戶端官方定義如下:

          Elasticsearch Java API 客戶端為所有的 Elasticsearch API 提供請(qǐng)求和響應(yīng)處理。

          它將請(qǐng)求處理轉(zhuǎn)給 Elasticsearch Low Level REST 客戶端,這也是 High Level 被廢棄而 Low Level  REST 客戶端依然健在的原因,Low Level REST 客戶端負(fù)責(zé)處理 Http 連接建立和池化、重試機(jī)制等所有傳輸級(jí)別的問題。

          Elasticsearch Java API Client 三個(gè)典型特點(diǎn):

          • 特點(diǎn)1:對(duì)象構(gòu)造基于構(gòu)建者模式( builder pattern.)。

          建造者模式(Builder Pattern)使用多個(gè)簡(jiǎn)單的對(duì)象一步一步構(gòu)建成一個(gè)復(fù)雜的對(duì)象。該模式增強(qiáng)了客戶端代碼的可用性和可讀性。

          舉例如下:


          • 特點(diǎn)2:使用 lambda 構(gòu)建嵌套對(duì)象,從而編寫干凈、富有表現(xiàn)力的 DSL 變得容易。

          分層 DSL 接近 elasticsearch 的 json 格式。


          • 特點(diǎn)3:應(yīng)用程序類能自動(dòng)映射為 Mapping。

          https://github.com/elastic/elasticsearch-java

          3、Elasticsearch 非官方客戶端

          3.1 JEST 客戶端

          Http REST 客戶端,2017年左右還比較新穎,我還做過推薦。

          但,最新一次更新是 2 年前,所以已不推薦使用。

          原因:Elasticsearch 版本更迭太快,不做新版本適配,很多功能都可用或至少不好用。

          https://github.com/searchbox-io/Jest

          3.2 BBoss 客戶端

          https://esdoc.bbossgroups.com/#/

          國(guó)產(chǎn)的能適應(yīng) 1.X——8.X 所有版本的 java rest 客戶端。

          3.3 Spring data Elasticsearch 客戶端

          最新版本為:Spring Data Elasticsearch 4.4,支持 Elasticsearch 7.17.3 版本。

          8.X 尚不支持,之前的觀察看,更新較慢。

          使用 Spring Data,High Level REST Client 是默認(rèn)客戶端,且仍然支持 Java Transport 客戶端,目 前尚不支持 Elasticsearch Java API 客戶端。

          Spring data Elasticsearch 官方文檔如下:

          https://docs.spring.io/spring-data/elasticsearch/docs/current/reference/html/

          實(shí)現(xiàn)推薦參考:

          https://developer.okta.com/blog/2022/02/16/spring-data-elasticsearch

          4、Elasticsearch java 客戶端如何選型?

          選型關(guān)注要點(diǎn):

          • Elasticsearch 集群的版本。
          • 歷史版本的兼容性問題。
          • 未來升級(jí)版本、擴(kuò)展性問題。
          • 所選型的客戶端是否更新及時(shí),能適配將來的版本。

          如果當(dāng)前是:7.X 版本且不考慮升級(jí),那就 High Level REST 客戶端。

          如果當(dāng)前是:8.X 版本,那就 Elasticsearch Java API 客戶端。

          如果當(dāng)前是:5.X、6.X 版本,推薦盡早升級(jí)集群版本。

          JEST 已不更新和維護(hù),不推薦使用。

          BBoss 客戶端,根據(jù)自己業(yè)務(wù)需要做選型。

          Spring 框架的 Web 項(xiàng)目,可以使用 Spring Data Elasticsearch,但關(guān)注它的更新版本,截止:2022-06-17,支持到:7.17.3 版本。

          5、小結(jié)

          隨著 Elasticsearch 的版本快速更迭,Elasticsearch java 客戶端也在隨之變化。

          本文以時(shí)間為主線梳理了 Elasticsearch 官方 java 客戶端的演進(jìn)歷史,并列舉常見的非 Elasticsearch 客戶端。

          Elasticsearch java 客戶端琳瑯滿目、“亂花漸欲迷人眼”,但我們需要結(jié)合集群版本、集群的過去和將來,以發(fā)展的眼光選型適合自己的 Elasticsearch 客戶端。

          你的 Elasticsearch 集群開發(fā)使用的什么 java 客戶端?有沒有坑?歡迎留言交流。

          推薦閱讀

          1. 如何從0到1打磨一門 Elasticsearch 線上直播課?

          2. 重磅 | 死磕 Elasticsearch 方法論認(rèn)知清單(2021年國(guó)慶更新版)

          3. 如何系統(tǒng)的學(xué)習(xí) Elasticsearch ?

          短時(shí)間快習(xí)得多干貨!

          和全球 1600+ Elastic 愛好者一起精進(jìn)!


          比同事搶先一步學(xué)習(xí)進(jìn)階干貨!
          瀏覽 119
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  免费a级猛片在线观看,女人毛片a级大学 | 91天堂在线 | 91伊人在线 | 日本免费成人黄色网址 | 亚洲乱伦天堂 |