2017-01-09 31 views
0

我正在使用AWS ElasticSearch 2.3中的Java中的批量HTTP API。 當我使用REST客戶端,爲德批量加載,我得到以下錯誤:AWS ElasticSearch 2.3 Java HTTP批量API

504 GATEWAY_TIMEOUT 

當我運行它LAMBDA在Java中,HTTP的帖子,我得到:

{ 
    "errorMessage": "2017-01-09T19:05:32.925Z 8e8164a7-d69e-11e6-8954-f3ac8e70b5be Task timed out after 15.00 seconds" 
} 

通過測試我注意到,大宗原料藥不調整這些設置這些:

"number_of_shards" : 5, 
    "number_of_replicas" : 5 

當碎片和副本都設置爲1,我可以做一個批量加載沒有問題。 我一直在使用此設置以使我的批量加載嘗試:

"refresh_interval" : -1 

但到目前爲止,它在所有做沒有任何影響。在Java Lambda中,我將數據作爲來自S3位置的InputStream加載。 對於Java HTTP,我現在有什麼選擇? 還有什麼我可以嘗試的索引設置? 我可以嘗試AWS訪問策略中的其他任何內容嗎? 謝謝你的時間。

1Edit:

我也嘗試了這些PARAMS:_bulk action.write_consistency =一個&刷新,但沒有什麼區別爲止。

2Edit:

這裏是什麼讓我的批量加載工作 - 建立一致性參數(我並不需要設置refresh_interval):

  URIBuilder uriBuilder = new URIBuilder(myuri); 
      uriBuilder = uriBuilder.addParameter("consistency", "one");     
      HttpPost post = new HttpPost(uriBuilder.build()); 
      HttpEntity entity = new InputStreamEntity(myInputStream); 
      post.setEntity(entity); 

回答

2

從我的經驗,可能會出現問題,當你的索引您的羣集無法滿足複製設置。這發生在網絡分區期間,或者您只需設置物理集羣無法滿足的複製要求。

在我的情況下,當我將我的生產設置(number_of_replicas:3)應用到我的開發集羣(這是單節點集羣)時,會發生這種情況。

您的兩個解決方案(將副本設置爲1或將您的一致性設置爲1)可以解決此問題,因爲它們允許Elastic繼續批量索引而不等待其他副本進入聯機狀態。

彈性搜尋可能會對失敗更直觀的消息,也許他們在彈性5

做你的集羣設置爲單