问题:
elasticsearch每次都批量插入几万数据量,然后就会出现下列问题。看这个问题应该是配置的问题
ERROR [https-jsse-nio-443-exec-4] 2020-07-09 23:31:54 (:80) : 30,000 milliseconds timeout on connection http-outgoing-0 [ACTIVE]
at (:808)
at (:248)
at (:235)
at (:1611)
at (:1581)
at (:1551)
at (:531)
at (:76)
at (:146)
at .invoke0(Native Method)
at (:62)
at (:43)
at (:498)
at (:190)
at (:138)
at (:105)
at (:879)
at (:793)
at (:87)
at (:1040)
at (:943)
at (:1006)
at (:898)
at (:634)
at (:883)
at (:741)
at (:231)
at (:166)
at (:53)
at (:193)
at (:166)
at (:123)
at (:193)
at (:166)
at (:100)
at (:119)
at (:193)
at (:166)
at (:93)
at (:119)
at (:193)
at (:166)
at (:201)
at (:119)
at (:193)
at (:166)
at (:202)
at (:96)
at (:541)
at (:139)
at (:92)
at (:74)
at (:343)
at .http11.(:373)
at (:65)
at $(:868)
at $(:1590)
at (:49)
at (:1149)
at $(:624)
at $(:61)
at (:748)
Caused by: : 30,000 milliseconds timeout on connection http-outgoing-0 [ACTIVE]
at (:387)
at (:92)
at (:39)
at (:175)
at (:261)
at (:502)
at (:211)
at (:280)
at (:104)
at $(:591)
... 1 more
解决办法(我仅处理elasticsearch7.8.0版本的,可以看到下面的方法出现的是RestHighLevelClient高级客户端的):
创建下面列举的配置类即可,然后相应修改下自己的需要的时间
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
@Configuration
public class ElasticSearchClientConfig {
@Bean
@Qualifier("highLevelClient")
public RestHighLevelClient restHighLevelClient() {
// RestHighLevelClient highLevelClient = new RestHighLevelClient(
// (new HttpHost("127.0.0.1", 9200, "http")));
RestHighLevelClient highLevelClient = new RestHighLevelClient(
(new HttpHost("127.0.0.1", 9200, "http"))
.setRequestConfigCallback(new () {
// 该方法接收一个对象,对该对象进行修改后然后返回。
@Override
public customizeRequestConfig(
requestConfigBuilder) {
return (5000 * 1000) // 连接超时(默认为1秒)
.setSocketTimeout(6000 * 1000);// 套接字超时(默认为30秒)//更改客户端的超时限制默认30秒现在改为100*1000分钟
}
}));// 调整最大重试超时时间(默认为30秒).setMaxRetryTimeoutMillis(60000);
return highLevelClient;
}
}
RestClientBuilder支持同时提供一个RequestConfigCallback和一个HttpClientConfigCallback,你可以定制 the Apache Async Http Client 公开的配置。这两个回调函数可以修改某些特定的行为,而不会覆盖RestClient初始化的所有其他默认配置。
使用elasticsearch查询百亿级数据必然会影响查询的速度但是es与客户端的的默认响应时间只有30秒,查询大量的数据时30秒的时间一般都不够用。