elasticsearch批量插入数据的时候出现: 30,000 milliseconds timeout on connection

时间:2025-03-17 22:18:58

问题:

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秒的时间一般都不够用。