本文介紹通過用戶端訪問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命令訪問叢集?
參見curl官方文檔,下載並安裝curl命令工具。
參見通過curl命令訪問與管理Elasticsearch,訪問Elasticsearch叢集。
Elasticsearch用戶端支援使用哪些SQL查詢方式?
Elasticsearch和官方Elasticsearch的功能及使用方式一致,用戶端支援以下SQL查詢方式:
Elasticsearch 6.3版本開始支援X-Pack SQL語言,用戶端支援的SQL查詢方式包括SQL REST API、SQL Translate API和SQL JDBC驅動等,用戶端支援的更多SQL查詢方式請參見SQL Client Applications。
X-Pack SQL查詢方式。使用Elastic官方提供的x-pack-sql外掛程式,具體資訊請參見sql-search-api。
第三方SQL外掛程式。例如開源elasticsearch-sql,建議您參考第三方開源外掛程式相關文檔。