全部產品
Search
文件中心

Elasticsearch:用戶端訪問Elasticsearch FAQ

更新時間:Oct 22, 2024

本文介紹通過用戶端訪問Elasticsearch方面的常見問題。

Elasticsearch API相容開源Elasticsearch API嗎?

Elasticsearch API包含Restful API和管控側API:

  • Restful API:完全相容開源。主要完成叢集資料的變更,例如文檔的增刪改查、別名配置等,詳細資料請參見Restful API

  • 管控側API:Elasticsearch專屬。主要完成您在Elasticsearch控制台上的操作,例如建立執行個體、配置白名單等,詳細資料請參見API概覽

使用Transport Client訪問Elasticsearch,其中cluster.name怎麼擷取?

cluster.name就是執行個體ID,可在執行個體的基本資料頁面擷取,詳情請參見查看執行個體的基本資料

使用Transport Client串連Elasticsearch時,報錯NoNodeAvailableException如何處理?

使用5.5或5.6版本的Transport Client與Elasticsearch建立串連時會提示NoNodeAvailableException的錯誤,推薦您使用5.3.3版本。使用Transport Client,需要購買5.5或5.6版本的Elasticsearch執行個體(6.x及以上版本不支援),並且需要在代碼中將client.transport.sniff設定為false,詳情請參見Transport Client(5.x)

說明

Elasticsearch 7.0中已經棄用Transport Client,因此在實際開發中建議您使用Java REST Client,詳情請參見High Level REST Client(6.3.x)High Level REST Client(6.7.x)Low Level REST Client (5.x)

用戶端連線逾時(Client Request Timeout),如何處理?

用戶端連線逾時的可能原因及解決方案如下:

可能原因

解決方案

記憶體不足,導致IO讀寫阻塞。

通過指標含義與異常處理建議,觀察記憶體的使用方式和讀寫情況。如果記憶體和讀寫壓力較大,建議業務側控制最佳化讀寫。

設定逾時時間過短,在服務已耗用時間過程中導致逾時。

結合業務情境,在用戶端調整ConnectTimeout(例如調整到10000)和SocketTimeout(例如調整到30000)參數值。

網路問題引發逾時,出現網路波動導致逾時。

本網問題需要您自行排查解決。

可以通過Java API訪問Elasticsearch叢集的9200連接埠嗎?

可以。Elasticsearch叢集的9200連接埠支援官方所有API,而9300連接埠因存在安全隱患,目前僅Elasticsearch 5.x版本叢集使用5.3.3版本的Transport Client通過9300連接埠訪問叢集,6.0及以上版本不支援9300連接埠,僅能使用9200連接埠訪問叢集,同時Elasticsearch不支援自訂連接埠。

說明

由於Elasticsearch 5.5.3版本的Transport Client SDK存在bug,因此雲上僅支援5.3.3版本的Transport Client SDK用戶端,其次需要在串連Elasticsearch的代碼中設定client.transport.sniff參數為false,詳細資料請參見Transport Client(5.x)

用戶端連線逾時,報錯Connection reset by peer,如何處理?

報錯原因

Connection reset by peer報錯是在用戶端和叢集串連意外斷開後的讀和寫操作引起的。

排查方案

可以從以下幾個方面去排查:

  • 查看叢集日誌和監控資訊,判斷叢集是否存在異常。

    如果出現叢集狀態不健康、節點失聯等問題,需要先解決這些叢集層面的問題,詳細資料請參見指標含義與異常處理建議

  • 判斷用戶端是否有網路攔截策略。

    您可以分別在使用者側、Elasticsearch服務端、SLB端抓包進行排查,如果這些都沒有異常,還需要查看用戶端是否有安全裝置攔截。

  • 判斷http-keepalive時間是否逾時。

    http-keepalive是保證一個TCP串連儘可能傳遞多的報文,每次互動一個報文後就會更新http-keepalive時間,如果http-keepalive時間逾時,意味這個這段時間client和server沒有報文互動,本端會主動關閉並釋放串連。

    說明

    tcp-keepalive是一種探測TCP串連狀態的保活機制,TCP串連建立後如果不主動關閉,client和server沒有發生異常,這個串連理論上是一直存在的。http-keepalive是保證一個TCP串連上儘可能傳遞更多的報文,如果http-keepalive時間內沒有報文互動是會主動關閉串連的。

    如果http-keepalive時間逾時,您可以增加串連請求的逾時時間。例如在用戶端將ConnectTimeout調整參數到10000,SocketTimeout參數調整到30000。

如果以上排查均未定位到原因,您可以在代碼層面捕獲異常,重試請求,結合實際情境進行分析。

Windows系統終端串連Elasticsearch時,如何安裝curl命令,並通過curl命令訪問叢集?

  1. 參見curl官方文檔,下載並安裝curl命令工具。

  2. 參見通過curl命令訪問與管理Elasticsearch,訪問Elasticsearch叢集。

Elasticsearch用戶端支援使用哪些SQL查詢方式?

Elasticsearch和官方Elasticsearch的功能及使用方式一致,用戶端支援以下SQL查詢方式: