当前位置:网站首页>面试官:如何定期去清理ES集群的数据
面试官:如何定期去清理ES集群的数据
2022-07-15 08:54:00 【爱开发V】
如何定期去清理ES集群的数据
文|洪生鹏
作为一名程序员,求职面试时,不知道你有没有遇到这样的面试题。
如何定期去清理ES集群的数据?
张工是一名java程序员,有两年大数据开发经验,最近到某知名互联网公司面试,面试官就问了他这样的一个问题:
如何定期去清理ES集群的数据以保证集群处在一个最佳负载状态?
张工:编写shell脚本定时删除索引就好了。
面试官:如果是删除具体某个索引的数据,又该怎么操作?
由于张工平时没有做到这块,这个问题就答不出个所以然来。
一般需要定期删除ES集群某个索引的历史数据,很有可能是前期设计时考虑不够全面。
随着业务的不断发展,单个索引的数据量将越来越大,索引又不能变更,如果没有定期清理数据,会导致查询速度越来越慢,严重影响用户体验。
如何定期去清理ES集群的数据?
对于这个问题,如果是删除这个索引这个比较好办,直接删除索引(Delete Index)就可以了 ,但要是遇到是删除具体某个索引的部分数据,又该怎么操作。
我们今天来介绍一种比较常见的做法。通过Delete By Query的方式去删除索引中的数据。
这个API的功能是根据特定的查询条件对ES相关索引中某些特定的文档进行批量删除。
下面我们来看看这个API的基本用法。
_delete_by_query会删除所有query语句匹配上的文档,用法如下:

看到这个应该不陌生,这参数就不是和Search API的用法一样的。确实,在Search API中query的参数和上面效果是一样的。
表示index_name 这个索引下 字段name等于“爱开发”记录都会被删除。
执行后,它会返回数据格式,告诉我们用时和删除多少记录。
响应体:
{
"took" : 3686,
"timed_out" : false,
"total" : 117666,
"deleted" : 117666,
"batches" : 118,
"version_conflicts" : 0,
"noops" : 0,
"retries" : {
"bulk" : 0,
"search" : 0
},
"throttled_millis" : 0,
"requests_per_second" : -1.0,
"throttled_until_millis" : 0,
"failures" : [ ]
}下面我们来看看每个字段具体含义
took: 表示整个操作的开始到结束的毫秒数。
timed_out: 请求处理过程中是否超时
total: 成功处理的doc数量
deleted: 成功删除的文档数。
batches: 通过查询删除的scroll响应数量。
version_conflicts: 根据查询删除时,版本冲突的数量。
noops: 暂没发现有什么作用,据悉是为了保持跟其他api结构一致
retries: search 操作和bulk操作的重试次数
throttled_millis: 因为requests_per_second而产生的睡眠时间
requests_per_second: 每秒处理的请求数
throttled_until_millis: 暂没发现有什么作用,据悉是为了保持跟其他api结构一致failures: 失败的情况,会终止操作的失败
通过delete_by_query API这样就可以解决需求定期去清理ES集群索引的数据了。
不过光知道使用还不够,我们有必要了解下它的基本原理。
Delete By Query 删除原理:
delete_by_query并不是真正意义上的物理删除,它只是版本变化并且对文档增加了删除标记。
当再次搜索的时候,就会搜索全部然后再过滤掉有删除标记的文档。
因此,该索引所占的空间并不会随着该API的操作磁盘空间会马上释放掉,只有等到下一次段合并的时候才真正被物理删除,这个时候磁盘空间才会释放。
相反,在被查询到的文档标记删除过程需要占用磁盘空间,这个时候,你会发现触发该API操作的时候磁盘不但没有被释放,反而磁盘使用率上升了。
总结:
在生产环境使用Delete By Query 删除API时有两个事项需要注意。
一般使用该API,意味着要操作的索引数据量都不小,文档都是千万甚至数亿级别。这是因为大数据量情况下删除数据需要消耗较多的I/O CPU 资源,容易对生产集群造成影响。因此,使用这个操作建议在业务低峰期或者晚上进行操作。
前面我们有提到过,delete_by_query并不是真正意义上的物理删除,它只是版本变化并且对文档增加了删除标记。因为标记删除需要占用磁盘空间,所以在删除过程中要确定集群磁盘有一定的余量,如果磁盘空间不够,这个操作的失败概率会增大。
关于_delete_by_query这个API的基本用法就简单分享到这,本文只是简单讲述Delete By Query的基础用法,这个API还有其他配置参数,具体有需要的可以到官网文档查看。
由于笔者水平有限,文中纰漏之处在所难免,权当抛砖引玉,不妥之处,欢迎交流。
—END—
往期推荐
边栏推荐
- vs2019社区版下载教程(详细)
- Proxmox ve 7.2 install grafana+prometheus monitoring PVE exporter
- Serein 【懒人神器】一款图形化、批量采集url、批量对采集的url进行各种nday检测的工具 摸鱼项目问题解决
- Fast and slow clock domain processing of single bit data pulse broadening method
- Proxmox VE 7.2 ESXi OVA 导入
- Introduction and Simulation of string function
- 【C语言】模拟通讯录(数组版、动态版、链表版)
- source insight4 配色仿vscode
- Application scheme for remote monitoring of Wutong Bolian photovoltaic power station
- Cyber Nuwa, how to make digital people?
猜你喜欢

Wireless sensor network -- hardware design of wireless sensor network

慢 SQL 分析与优化

15.1.2、MySQL—mysql时间与时间戳转换的函数,unix_timestamp、from_unixtime

It's too convenient to make a data analysis crosstab with one line of code

WeMos和树莓派的通信

Lightly: a new generation of rust IDE

指针与数组笔试题详解

HCIP第七天笔记

Technology sharing | quick intercom -5g intercom

用队列实现栈
随机推荐
Animation optimization
Mise à l'essai de l'interface d'essai du logiciel mise en oeuvre de la production automatique de rapports et intégration continue de Postman + Newman + Jenkins
Pickpocket reentrantlock and AQS implementation principle
New development of Flink runtime for streaming batch integration
Proxmox ve 6 updated to 7
Proxmox VE 6 更新到 7
Redis key notification related notes (event notification)
目标检测--边框回归损失函数SIoU原理详解及代码实现
Proxmox ve 7.2 LxC deployment openwrt
Proxmox VE 7.2 从CT 模板导入虚拟机
20220714 第二组 刘世琦 学习记录
股票账户上买基金安全吗。可以做短线吗
[MySQL] MySQL groups statistical data by year / month / day / week
看起来好像很厉害的VBS小程序员代码
Lightly: a new generation of rust IDE
企业命名规范
Network security tools 2 -- Information Collection 2
zabbix故障集--当你忘记登录zabbix系统的账号密码时
Application and practice of Apache Flink in betta
Week 4 Data analysis algorithms-Linear models for regression-Bias-Variance Analysis(Part B)