Q:有两个人掉到陷阱里了,死的人叫死人,活人叫什么?

update_mapping 过多导致master卡住,这种情况一般怎么处理呢?

Elasticsearch | 作者 wangxinrong | 发布于2020年11月10日 | 阅读数:1864

日志es集群里索引比较多,都是按天创建。
有一百多个索引,用的默认的dynamic mapping。每个索引的字段少的几十个,多的上千个,都是开发自己定义的,字段他们可以随时调整。
第二天的索引是预先创建的,但因为索引模板里没有设置默认mapping,这些索引的mapping信息是空的。
每到跨天的时间点,当数据写入新索引时,会产生大量的update_mapping操作,这时master会非常卡,严重时整个集群会卡住无法写入数据。
 
我想在自动创建索引的脚本基础上,加上设置mapping的操作,例如abc,新建abc-2020.11.11的索引时,取abc-2020.11.10或abc-2020.11.09的索引当前的mapping信息。
但这样的话,每次都会一直沿用旧的mapping信息,假如某个字段已经没有了,也会一直存在下去,或者名称相同,但数据的类型变了,还会导致冲突。
不知道有没有什么更好的处理方法呢?
已邀请:

JiangJibo - 喊我雷锋

赞同来自:

感觉你这个不是很好处理,如果是应对闲置字段的话,在创建索引前,通过每个field查询,查看指定的field是否有不为空的数据,如果存在说明这个field还在用,不存在则说明这个field闲置了,手动修改mappings,自己创建索引吧。数据名称冲突我觉得你弄个统一的集群mappings管理,实时的展示当天索引的mappings,新增的field不能重复。 反正就是单纯靠es应该不容易实现,肯定要有脚本。

envy666

赞同来自:

你写个写入数据的中间件给开发调用,跨天时自动解析数据字段内容并创建mapping后再写入数据,这样你才有办法控制

JoyPanda

赞同来自:

我们也遇到了,暂时没有解决方案。官方#51038  这个pull 不知道官方这个代码解决了这个问题没有,看后面讨论应该只是缓解,不是彻底解决。

要回复问题请先登录注册