前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Elasticsearch分片均衡的情况下,还会出现热写造成的bulk reject?

Elasticsearch分片均衡的情况下,还会出现热写造成的bulk reject?

原创
作者头像
岳涛
修改2022-04-26 16:21:01
1.3K4
修改2022-04-26 16:21:01
举报
文章被收录于专栏:大数据生态大数据生态

说明

本文描述问题及解决方法同样适用于 腾讯云 Elasticsearch Service(ES)

  • 系统环境说明

Linux环境:CentOS Linux release 7.2 (Final)

Elasticsearch: 7.10.1

Java:1.8.0_181

  • 机器配置

机器数量:6

内存:64G

硬盘:2T

CPU核心数:32

背景

众所周知,当业务写入量很大的时候,如果索引分片分布得不均衡,大概率会发生bulk reject。这是由于分片设计不合理,没有均匀分布到所有节点,无法充分利用Elasticsearch分布式架构的特性,请求全部集中到了个别节点,压力无法分散,进而导致的写入拒绝。

问题

对于背景中介绍的场景,本文则不做过多介绍。这里我们关注的是另外一种情况:

当ES集群所有索引分片设计合理的前提下,分片分布很均衡,但是还是有个别节点发生了写入拒绝。这种问题就比较奇怪,需要深入排查一下。

通过业务监控到的失败率,结合写入拒绝率,可以确认判断业务失败是由bulk reject引起的。

问题原因

通过排查发现,reject全部集中在一个节点:

回溯历史队列情况,也发现只有个别节点容易超过write queue的最大值(1024):

所以这里我第一时间怀疑是业务有指定分片写入的行为,通过确认,发现6块分片只有1块有数据,果不其然:

然后通过进一步确认,发现每条数据都指定了routing。而routing的值全文只有一个,所以routing的不合理设计就是造成问题的罪魁祸首。

解决方案

改造业务改变routing逻辑为随机值,或者不指定routing写入,才能解决该问题。

上图为改造之后的CPU监控,可以看到效果还是很明显的。CPU使用率从9号业务改造之后,各节点之间表现得更加均匀,没再有明显的热点。

bulk reject从9号之后,也再也没有发生过,问题解决。

总结

业务指定routing进行写入,当routing设计不合理时,会出现大部分routing值都是重复的,会使所有请求都被转发到同一个节点,直接导致个别节点写入队列被打满、其他队列都很空闲的现象。所以,合理的分片设计固然重要,合理的routing设计也不能忽视,不然都会引起写入拒绝。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 说明
  • 背景
  • 问题
  • 问题原因
  • 解决方案
  • 总结
相关产品与服务
Elasticsearch Service
腾讯云 Elasticsearch Service(ES)是云端全托管海量数据检索分析服务,拥有高性能自研内核,集成X-Pack。ES 支持通过自治索引、存算分离、集群巡检等特性轻松管理集群,也支持免运维、自动弹性、按需使用的 Serverless 模式。使用 ES 您可以高效构建信息检索、日志分析、运维监控等服务,它独特的向量检索还可助您构建基于语义、图像的AI深度应用。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档