ElasticSearch常見錯誤整理 5.5.x
1.EsRejectedExecutionException
error:
failure in bulk execution:
[4]: index [teacher.tis1.teacher], type [teacher_comment], id [1265687], message [RemoteTransportException[[node-1][192.168.4.30:9300][indices:data/write/bulk[s][p]]]; nested: EsRejectedExecutionException[rejected execution of [email protected]
原因: 說明ES索引資料的速度已經跟不上client端傳送bulk請求的速度,請求佇列已滿以致開始拒絕新的請求。 這是ES叢集的自我保護機制。可以適當睡眠一段時間或者將佇列設定大點。預設設定是 bulk thead pool set queue capacity =50 可以設定大點。
解決辦法:開啟 elasticsearch.yml 在末尾加上
threadpool:
bulk:
type: fixed
size: 60
queue_size: 1000
重新啟動服務即可
2.DocumentMissingException
error: [[teacher.tis1.teacher/YudbzduURsGhxHMRzyfNcA][[teacher.tis1.teacher][1]] DocumentMissingException[[teacher][344]: document missing]]
原因: 找不到文件,可能是索引(index)或者型別(type)名稱錯誤導致找不到文件,或者文件記錄不存在時更新索引則報錯。比如:更新id為414的記錄,而此時ES中不存在id為414記錄的資料,則丟擲此異常
解決辦法:
1.檢查索引(index)名稱是否正確
2.檢查型別(type)名稱是否正確
3.記錄不存在時更新索引則報錯 可以在更新索引是使用upsert屬性,如果不存在則進行建立。程式碼如下:
IndexRequest indexRequest = new IndexRequest(index, type, id).source(jsonSource);
UpdateRequest updateRequest = new UpdateRequest(index, type, id).doc(jsonSource).upsert(indexRequest);
3.RemoteTransportException:
error: org.elasticsearch.transport.RemoteTransportException: Failed to deserialize exception response from stream
原因: es節點之間的JDK版本不一樣
解決辦法:統一JDK環境
4.NoNodeAvailableException:
error: org.elasticsearch.client.transport.NoNodeAvailableException: No node available
原因: 節點不可用,
(1) es client與java client的版本不一致
(2)埠號錯誤
(3)叢集名字錯誤
(4)jar包引用版本不匹配
解決辦法:
1.檢查es client與java client的版本是否一致 目前我們專案中使用的是java1.8對應es5.5.2
2.檢查埠號是否正確 使用client連線應使用es的transport 埠號
3.檢查叢集名稱是否正確
4.檢查es與es client的版本號是否一致 目前我們專案中使用的均為5.5.2
https://blog.csdn.net/github_38395241/article/details/77198744