问题描述
我使用 elasticsearch 7.9 版,并且我在每个月滚动的索引中索引文档。 我的问题是 elasticsearch 中的并发更新请求需要很长时间。例如,如果更新对象的总时间为 6000 毫秒,则在 elasticsearch 中更新文档需要 5500 毫秒,这对我们来说不是很好。 这是我如何配置与 elasticsearch 的连接:
HttpHost[] hosts = new HttpHost[addresses.length];
for (int i = 0,size = addresses.length; i < size; i++) {
hosts[i] = new HttpHost(addresses[i],port,"https");
}
Path trustStorePath = Paths.get(CERTIFICATE_FILEPATH));
KeyStore truststore = KeyStore.getInstance("pkcs12");
try (InputStream is = Files.newInputStream(trustStorePath)) {
truststore.load(is,PASSWORD);
}
SSLContextBuilder sslBuilder = SSLContexts.custom()
.loadTrustMaterial(truststore,null);
final SSLContext sslContext = sslBuilder.build();
SSLIOSessionStrategy sslConnectionSocketFactory = new SSLIOSessionStrategy(sslContext,NoopHostnameVerifier.INSTANCE);
final CredentialsProvider credentialsProvider =
new BasicCredentialsProvider();
credentialsProvider.setCredentials(AuthScope.ANY,new UsernamePasswordCredentials(USERNAME,PASSWORD));
IOReactorConfig ioReactorConfig = IOReactorConfig.custom()
.setIoThreadCount(Runtime.getRuntime().availableProcessors())
.setConnectTimeout(6000)
.setSoTimeout(6000)
.build();
ConnectingIOReactor ioReactor = new DefaultConnectingIOReactor(ioReactorConfig);
PoolingNHttpClientConnectionManager poolingConnManager = new PoolingNHttpClientConnectionManager(ioReactor,RegistryBuilder.
<SchemeIOSessionStrategy>create()
.register("http",NoopIOSessionStrategy.INSTANCE)
.register("https",sslConnectionSocketFactory)
.build()
);
poolingConnManager.setMaxTotal(THREAD_POOL_SIZE);
restClient = new RestHighLevelClient(RestClient.builder(hosts)
.setHttpClientConfigCallback(httpClientBuilder -> httpClientBuilder.setSSLContext(sslContext)
.setSSLHostnameVerifier(NoopHostnameVerifier.INSTANCE)
.setDefaultCredentialsProvider(credentialsProvider)
.setConnectionManager(poolingConnManager)
)
.setRequestConfigCallback(requestConfigBuilder ->
requestConfigBuilder
.setConnectTimeout(6000)
.setConnectionRequestTimeout(6000)
.setSocketTimeout(6000)
)
);
这是我在项目中的更新请求
UpdateRequest request = new UpdateRequest(
indexName,id)
.doc(doc,XContentType.JSON)
.setRefreshPolicy(WriteRequest.RefreshPolicy.WAIT_UNTIL)
.retryOnConflict(5);
UpdateResponse response = dataRestClient.update(request,RequestOptions.DEFAULT);
连接配置是否有问题
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)