【魔镜】仪表盘刷新不到最新数据

魔镜问题汇总 yangchenhui 3945℃ 0评论
问题描述

通过脚本或者通过spark-shell更新某张表之后,也调用的spark refresh table的接口,然而仪表盘看到的还是旧数据,分析台、api接口调用返回的都是旧数据。

问题原因分析

魔镜从7.3.5.0版本开始,为了增加仪表盘性能和并发能力,在sql查询和spark之间增加了一层缓存,使用redis加速性能。

缓存大概逻辑:

  1. 图表、分析台、api等功能,最终都会生成一条sql,我就以这条sql的hashcode作为缓存的key。
  2. 通过key去redis中查询是否有缓存数据,有的话直接返回,没有的话走spark计算。(备注:只要sql变了,就会有一条缓存,如果你对这张表进行了200次不同的sql查询,就会有200条缓存)
  3. 表一旦更新,通过定时任务、脚本运行、外部调用更新数据接口(updateTableCache),后台就会启动线程刷新这200个缓存,保证缓存中一直都是最新数据。
解决办法
  1. 首先定位是不是缓存问题,图表编辑到分析台,然后查看数据是否正确。
  2. 将分析台看到的sql复制到数据开发的脚本中,查看脚本运行的结果是否正确(脚本不走缓存)。
  3. 如果确定是缓存问题,可以到"表管理"-"高级操作"-"更新表缓存/清除表缓存"。(如果缓存的sql特别多,建议直接清除,让图表重新走spark计算)

本文固定链接:杨晨辉的个人博客 » 【魔镜】仪表盘刷新不到最新数据
本站内容除特别标注外均为原创,欢迎转载,但请保留出处!

喜欢 (0)
发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址