- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我们有一个每秒向我们的 ES 集群添加数千个文档的应用程序。每次我们翻转我们正在写入的索引并开始写入新索引时,我们都会收到以下错误,这些错误不允许摄取文档大约 1 分钟。 1 分钟后,一切恢复正常,直到我们再次翻转索引。
[WARN ][o.e.c.s.MasterService ] [NODE_NAME_1] took [28.3s], which is over [10s], to compute cluster state update for [put-mapping[_doc, _doc, ...
[DEBUG][o.e.a.a.i.m.p.TransportPutMappingAction] [NODE_NAME_1] failed to put mappings on indices [[[INDEX_1/SOME_ID]]], type [_doc]
org.elasticsearch.cluster.metadata.ProcessClusterEventTimeoutException: failed to process cluster event (put-mapping) within 30s
at org.elasticsearch.cluster.service.MasterService$Batcher.lambda$onTimeout$0(MasterService.java:143) [elasticsearch-7.5.2.jar:7.5.2]
at java.util.ArrayList.forEach(ArrayList.java:1507) [?:?]
at org.elasticsearch.cluster.service.MasterService$Batcher.lambda$onTimeout$1(MasterService.java:142) [elasticsearch-7.5.2.jar:7.5.2]
at org.elasticsearch.common.util.concurrent.ThreadContext$ContextPreservingRunnable.run(ThreadContext.java:703) [elasticsearch-7.5.2.jar:7.5.2]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) [?:?]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) [?:?]
at java.lang.Thread.run(Thread.java:830) [?:?]
在第一行中,我把省略号放在末尾,因为它实际上很大,这是我们所看到的图像(如您在图像中看到的那样,该行突然结束):
您知道这些错误消息是关于什么的吗?
我们看到这些消息是否可能是因为我们的集群状态太大?这是否意味着我们有太多分片或节点?
谢谢。
注意:
最佳答案
当 ES 无法应对大型集群状态时会出现此错误,并且更新集群状态的默认超时为 10 秒,但正如您的错误消息中所述,它花费了 ~30 秒。
集群状态在主节点上计算,然后通过 MasterService.java
类发布 Diff(节点存在)或整个集群状态(如果新节点加入集群) Elasticsearch 。
你有大量的分片信息,这些信息在集群状态中维护,你的主节点无法在默认 10s
内计算状态。
下面是来自 Elasticsearch 类 org.elasticsearch.cluster.service.ClusterApplierService
的代码,它尝试更新集群状态并抛出此异常。
try {
UpdateTask updateTask = new UpdateTask(config.priority(), source, new SafeClusterApplyListener(listener, logger), executor);
if (config.timeout() != null) {
threadPoolExecutor.execute(updateTask, config.timeout(),
() -> threadPool.generic().execute(
() -> listener.onFailure(source, new ProcessClusterEventTimeoutException(config.timeout(), source))));
} else {
threadPoolExecutor.execute(updateTask);
}
}
您可以检查异常类 org.elasticsearch.cluster.metadata.ProcessClusterEventTimeoutException
代码如下
public ProcessClusterEventTimeoutException(TimeValue timeValue, String source) {
super("failed to process cluster event (" + source + ") within " + timeValue);
}
你可以看看上面的代码,这将有助于你更好地理解问题。
解决问题的一些建议:
cluster.publish.info_timeout = 10s default(maybe this can work)
cluster.publish.timeout = 30s by default
关于ElasticSearch 的 MasterService 计算集群状态的时间太长并抛出 ProcessClusterEventTimeoutException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60518260/
我突然无法创建索引(既不能显式创建也不能通过将某些内容索引到不存在的索引中)。其他操作都很好(索引、搜索)。我在 security.log 中得到的错误是: [2015-02-10 15:48:46,
我们有一个每秒向我们的 ES 集群添加数千个文档的应用程序。每次我们翻转我们正在写入的索引并开始写入新索引时,我们都会收到以下错误,这些错误不允许摄取文档大约 1 分钟。 1 分钟后,一切恢复正常,直
我是一名优秀的程序员,十分优秀!