MQ+REDIS+Elasticsearch千万级任务监控解决方案

Posted tianxl32

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MQ+REDIS+Elasticsearch千万级任务监控解决方案相关的知识,希望对你有一定的参考价值。

        背景介绍:某运营商云化数据中台全国业务生产任务监控,每天数据处理任务达千万级,要求做到任务报错、延迟实时告警,问题解决告警自动闭环关闭,以及亿级日志的快速查询要示。

        本篇文章重点介绍以下几点:

        1、任务日志如何做到实时告警

        2、解决消息时序问题

        3、告警闭环关闭实现方案

        4、上亿级日志秒级查询响应

一 、任务日志如何做到实时告警

        采集RocketMQ实现生产任务的实时传输与消费,全国生产任务并发实时将数据处理任务日志写入MQ,监控端实时消息。

        消息消费并入库Elasticsearch高峰时段TPS高达上千。

        监控系统告警模块完成预警配置,程序实时布控,捕捉到异常日志实时入库并触发告警。

二、如何解决消息时序问题

        针对时间较短的处理任务,开始和结束消息时间比较接近,会出现时序问题,即结束消息早于开始消息被消费掉,既而造成监控任务不完整,告警不准确问题,特别是开始消息找不到结束消息被一直认定为执行中。

        redis缓存解决方案,结束消息入库与开始消息合并,未找到开始消息即放入redis缓存,开始消息到达后并合入库后释放缓存数据。

        使用二级缓存方案,进行缓存设计。一级缓存为本地缓存,二级缓存为分布式缓存,对es进行优化,提高写入和检索性能,批量写入,进行几百一次批量写入,多线程写入。

三、告警闭环关闭实现方案

        通过自动识别错误任务恢复后新消息,对之前产生的告警进行关闭,实现告警清零的需求。

        每一个告警在入库时根据任务ID、时间批次等关键业务要素组合成唯一键值进行入库,之后所有消息消费时都会做一次业务组合键值比对,比对成功更新告警处理状态。

        利用Elasticsearch高效存储和毫秒级响应特性,以业务组合键值创建索引列,即使同一业务执行多次,通过键值获取+内存排序方式可以快速完成关闭处理。

四、上亿级日志秒级查询响应

        ES 使用lucene 的"term index -> term dictionary -> postings list" 的倒排索引结构,能够在数量巨大的 terms 中快速定位到某一个 term,同时节约对内存的使用和减少磁盘 io 的读取,然后,通过 FST 压缩放入内存,进一步提高了搜索效率。

        在联合查询时,在有 filter cache 的情况下,直接利用位图的原生特性快速求交并集得到联合查询结果,利用 skip list 对多个 postings list 求交并集,跳过遍历成本,节省了部分数据的解压缩 cpu 成本。

        增加segments的刷新时间,关闭不需要字段的doc values,使用keyword替代一些long或者int之类,关闭不需要查询字段的_source功能,最终实现资源占用比较少的情况下,还能做到亿级日志统计查询秒级响应。

以上是关于MQ+REDIS+Elasticsearch千万级任务监控解决方案的主要内容,如果未能解决你的问题,请参考以下文章

ElasticSearch + Canal 开发千万级的实时搜索系统

千万级业务

这样的Dubbo + Redis千万级分布式超高并发秒杀案例,有点厉害!

Dubbo + Redis 千万级分布式系统超高并发秒杀真实案例

redis timeout多大比较合适 用的jedispool没有分片?访问量大概每日千万级..设置的是默认的,老time out

千万级延时任务队列如何实现,看美图开源的-LMSTFY