[英]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訪問策略中還有其他內容嗎? 感謝您的時間。
我還嘗試了以下參數:_bulk?action.write_consistency = one&refresh但到目前為止沒有任何區別。
這是使我的大容量加載工作的原因-設置一致性參數(我不需要設置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.