簡體   English   中英

AWS ElasticSearch 2.3 Java HTTP批量API

[英]AWS ElasticSearch 2.3 Java HTTP bulk API

我打算在AWS ElasticSearch 2.3上的Java中使用批量HTTP api。 當我使用rest客戶端進行批量加載時,出現以下錯誤:

504 GATEWAY_TIMEOUT

當我在Java中以Lambda形式運行它時,對於HTTP帖子,我得到:

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

通過測試,我注意到批量API在以下設置下不起作用:

    "number_of_shards" : 5,
    "number_of_replicas" : 5

當分片和副本設置為1時,我可以進行批量加載而沒有問題。 我嘗試使用此設置來允許我的批量加載:

    "refresh_interval" : -1

但到目前為止,它完全沒有影響。 在Java Lambda中,我從S3位置將數據作為InputStream加載。 目前,對於Java HTTP,我有哪些選擇? 我可以嘗試使用索引設置中的其他內容嗎? 我可以嘗試的AWS訪問策略中還有其他內容嗎? 感謝您的時間。

1編輯:

我還嘗試了以下參數:_bulk?action.write_consistency = one&refresh但到目前為止沒有任何區別。

2編輯:

這是使我的大容量加載工作的原因-設置一致性參數(我不需要設置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); 

根據我的經驗,當群集無法滿足您的索引復制設置時,可能會發生此問題。 這可能是在網絡分區期間發生的,或者是您只是設置了物理群集無法滿足的復制要求。

就我而言,這是在將生產設置(number_of_replicas:3)應用於開發集群(即單節點集群)時發生的。

您的兩種解決方案(將副本的數量設置為1或將一致性設置為1)解決了此問題,因為它們使Elastic可以繼續批量索引而無需等待其他副本上線。

Elastic Search可能會有關於失敗的更直觀的消息,也許在Elastic 5中也是如此。

將集群設置為單個

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM