es查询崩溃不可用

来源:10-3 读性能优化

wzywzy

2022-01-04

老师你好 我有一个模糊的问题要请教您
之前公司上收日志存入es集群中 每天上收量大概在20-40g左右 保存的时间为30天
有一段时间 大数据开发发通告说 让我们尽量不要跨多个日期进行搜索日志 因为es会崩溃 ,崩溃后只能让那边重启,很耗时间
请问一下 发生这种情况的可能性是什么,如何解决,谢谢!

写回答

1回答

rockybean

2022-01-05

  • 这种实质是一个查询命中的索引过多,即命中的分片过多,导致过多数据载入内存进行计算

  • 尤其当你的查询有聚合类的查询时更严重,这会导致数据节点的 heap 因为短时间载入过多数据而触发严重的 GC

  • GC时间过长又会导致查询延迟变大,节点响应变慢,进而出现读队列拒绝等情况

  • 还可能出现离群现象(因为长GC导致无法即时回应 master 的心跳检查),离群后因为节点实际没有挂又会立刻申请加群,进一步增加了集群的不稳定

  • 最后整个系统雪崩,只能祭出重启大法。

这种的解决方法是做好索引的分片数规划,比如分片大小控制在30~50GB 左右,可以按周或者月来建立索引,将分片分散在尽量多的数据节点。

优化查询语句,缩小查询命中的分片数等等。

再不行就要考虑是不是要换一个数据产品,尤其是聚合类的查询并不是 es 的长项,这种要考虑用 clickhouse / apache doris 这种专业的 olap 产品

0
1
wzywzy
多谢老师回复!!
2022-01-05
共1条回复

Elastic Stack从入门到实践,动手搭建数据分析系统

有了Elastic Stack,不用写一行代码,你也可以玩转大数据分析!

1361 学习 · 397 问题

查看课程