ElasticSearch 错误:org.apache.http.ProtocolException:不是有效的协议版本

问题描述 投票:0回答:1
  • 我们最近将开发环境从Elasticsearch集群版本8.6.2升级到8.15.1

  • 我们正在使用 High Level Rest Client 且 **apiCompatibilityMode=true **

  • 升级后,我们开始看到来自 Elastic 查询的零星 500 个错误。我们在升级之前没有看到这些,并且我们之前也将 apiCompatibilityMode 设置为 true。

  • 发生这种情况时,我们可以在日志中看到以下异常:

org.apache.http.ProtocolException:不是有效的协议版本:0位于org.apache.http.impl.nio.codecs.AbstractMessageParser.parse(AbstractMessageParser.java:209)位于org.apache.http.impl。 nio.DefaultNHttpClientConnection.consumeInput(DefaultNHttpClientConnection.java:245)在org.apache.http.impl.nio.client.InternalIODispatch.onInputReady(InternalIODispatch.java:81)在org.apache.http.impl.nio.client.InternalIODispatch。 onInputReady(InternalIODispatch.java:39) 在 org.apache.http.impl.nio.reactor.AbstractIODispatch.inputReady(AbstractIODispatch.java:121) 在 org.apache.http.impl.nio.reactor.BaseIOReactor.read(BaseIOReactor. java:162)在org.apache.http.impl.nio.reactor.AbstractIOReactor.processEvent(AbstractIOReactor.java:337)在org.apache.http.impl.nio.reactor.AbstractIOReactor.processEvents(AbstractIOReactor.java:315)在 org.apache.http.impl.nio.reactor.AbstractIOReactor.execute(AbstractIOReactor.java:276) 在 org.apache.http.impl.nio.reactor.BaseIOReactor.execute(BaseIOReactor.java:104) 在 org.apache .http.impl.nio.reactor.AbstractMultiworkerIOReactor$Worker.run(AbstractMultiworkerIOReactor.java:591) 在 java.base/java.lang.Thread.run(Thread.java:840) 引起: org.apache.http.ParseException :不是有效的协议版本:0 位于 org.apache.http.message.BasicLineParser.parseProtocolVersion(BasicLineParser.java:134) 位于 org.apache.http.message.BasicLineParser.parseStatusLine(BasicLineParser.java:366) 位于 org.apache .http.impl.nio.codecs.DefaultHttpResponseParser.createMessage(DefaultHttpResponseParser.java:112) 在 org.apache.http.impl.nio.codecs.DefaultHttpResponseParser.createMessage(DefaultHttpResponseParser.java:50) 在 org.apache.http.impl .nio.codecs.AbstractMessageParser.parseHeadLine(AbstractMessageParser.java:156) at org.apache.http.impl.nio.codecs.AbstractMessageParser.parse(AbstractMessageParser.java:207)

  • 挖掘 Elasticsearch 客户端和 Apache 的 TRACE 级别日志没有得出任何结果,目前还不清楚为什么这个问题会偶尔发生

  • 我们无法通过curl或kibana复制该问题

  • 我们尝试了 Http 客户端中的一些配置更改,但到目前为止还无法稳定我们的开发环境

  • 我们发现有趣的另外一点是,当我们将 RestClientBuilder 上的 ConnectionReuseStrategy(使用 setHttpClientConfigCallback)设置为 NoConnectionReuseStrategy 时,protocolException not 不再出现。但是,我们不想采用此解决方案,因为它不会重用连接。

请告知是否有人遇到过此问题以及任何有助于解决该问题的建议。

  • 我们在 Http 客户端中尝试了一些配置更改,但到目前为止还无法稳定我们的开发环境

  • 挖掘 Elasticsearch 客户端和 Apache 的 TRACE 级别日志没有得出任何结果,目前还不清楚为什么这个问题会偶尔发生

  • 我们发现有趣的另外一点是,当我们将 RestClientBuilder 上的 ConnectionReuseStrategy(使用 setHttpClientConfigCallback)设置为 NoConnectionReuseStrategy 时,protocolException not 不再出现。但是,我们不想采用此解决方案,因为它不会重用连接。

elasticsearch
1个回答
0
投票

我认为您可能成为此处描述的问题的受害者:

https://github.com/elastic/elasticsearch/issues/92032

带有分块响应的 HEAD 请求似乎是导致 HTTP 解析错误的罪魁祸首。这应该在版本 8.6.2 中修复,但我想知道有关 apiCompatibilityMode 的注释是否仍然有效:

https://github.com/elastic/elasticsearch/issues/92032#issuecomment-1333569002

如果可能,您可以尝试使用 PCAP 进行诊断,以复制链接的 github 问题(尾随字节)中看到的行为

© www.soinside.com 2019 - 2024. All rights reserved.