在 Mapping 里面,将 dynamic 参数设置成 strict 可以拒绝索引包含未知字段的文档。 此条 Tips 由 medcl 贡献。

indices.breaker.total.use_real_memory影响写入

Elasticsearch | 作者 wangxinrong | 发布于2021年01月05日 | 阅读数:3355

我这边有一个ES5版本的集群,数据需要每天导入一次,完成后应用去查询当天导入的最新数据。
把数据节点分成了AB两组,前一天数据在A组节点的话,当天的数据就会导在B组。这样可以避免互相影响。导数据时,为尽快完成,一直都没有限速,可以把服务器cpu跑满,一直都正常运行。
 
最近新建了一个ES7的集群准备把服务切换过去,服务器资源,集群各项配置都相同,但在导数据时会频繁报下面的错误:
Caused by: org.elasticsearch.common.breaker.CircuitBreakingException: [parent] Data too large, data for [<transport_request>] would be [32602711944/30.3gb], which is larger than the limit of [31621696716/29.4gb], real usage: [32602685936/30.3gb], new bytes reserved: [26008/25.3kb], usages [request=0/0b, fielddata=0/0b, in_flight_requests=26008/25.3kb, accounting=127817469/121.8mb]
 
查了下网上也有类似问题,应该是ES7新增的indices.breaker.total.use_real_memory配置默认为true,写入量大的时候触发了断路器设置。上面那个问题里
有人回复的是通过调整GC参数来解决,也可以通过设置为false解决。
 
我想咨询下,这种情况下应该怎么设置比较好呢,如果像我之前这种已经确认写入量不会导致集群异常,是不是可以直接设置成false就行?这样设置后,会导致哪方面的保护功能失效呢?
已邀请:

AnswerI

赞同来自:

我是从hive往ES7发数据时触发了断路器,之后降低内存(32G-》24G),将触发条件设为"indices.breaker.total.limit": "80%",依然会触发,后面我就直接改为"indices.breaker.total.limit": "100%",就没有触发过,数据发送目前正常,但不知道是否还存在其他的坑

要回复问题请先登录注册