大数据日志实时扫描解决方案

困惑的日志实时扫描问题

最近开发了一个监测电商产品点击的监测系统,用最常规的写入日志的方式来记录商品的点击记录(不用Hbase因为文件速度写入更快)。然后今天读取昨天的数据进入Hbase进行统计。计算汇总完毕,Java处理Hbase返回汇总数据给MYSQL。

需求的增加


当我需要加载当天某个产品的1小时内点击情况,我扫描当日文件筛选最后一小时的数据即可。但是这个需求,可能公司很多人都需要来加载这个数据,就是这个当天不停增加的日志文件,会被不断的扫描。

读取数据方案:昨天及以前的数据从Hbase,今天的数据从日志文件里读取。

日志文件如下
2020-05-25.log
2020-05-24.log
2020-05-23.log
目前数据量不大,一天1万条,1M,但是随着业务的增长,会扩张到30万条。这样记录就变得很大了,我无法对一个文件进行实时扫描。

我需要读取今天的只要程序读取2020-05-25.log的日志即可

解决方案:

当服务器每日发生一个日志,因为会发生反复读取问题,所以正确的做法是每个被读取进去Hbase的日志文件都不应该再次扫描读取,而是从Hbase来读取。

当每天发生的日志很多,那么单独日志文件会变得很大比如200M,这个时候需要限制每个日志文件大小比如限制为10M,当文件超过了10M,那么日志重命名为2020-05-25.log.1 再次超过日志重命名为2020-05-25.log.2 日志文件结构如下

2020-05-25.log.2
2020-05-25.log.1
2020-05-25.log
2020-05-24.log
2020-05-23.log

扫描日志进入Hbase大系统的算法,按节奏一次读入2020-05-25.log.1 2020-05-25.log.2的数据,而即时数据,依然扫描2020-05-25.log这个文件。因为文件小,可以读取的足够快。

其他技术应用解决方案:


Java的RandomAccessFile

RandomAccessFile类中seek方法可以从指定位置读取文件,可以用来实现文件实时读取

RandomAccessFile 可以实现对一个很大文件,只快速读取最后一些字节的操作,这样也可以实现5分钟数据情况
https://java-er.com/blog/java-randomaccessfile/


This entry was posted in JAVA and tagged , , . Bookmark the permalink.
月小升QQ 2651044202, 技术交流QQ群 178491360
首发地址:月小升博客https://java-er.com/blog/log-scan-big-data/
无特殊说明,文章均为月小升原创,欢迎转载,转载请注明本文地址,谢谢
您的评论是我写作的动力.
2020.03.24 评论已经全局关闭,有事加QQ聊天