大数据日志采集工作笔记

数据采集概念
许多网站背后都会有一套日志采集系统,负责记录用户的行为数据,再根据自身业务,从各种的行为数据中提取、分析出有商业价值的数据。
流程粗略分为:数据采集,数据处理,数据落地(存储)。
数据处理分为:实时计算、离线计算。

实时计算:要求系统实时处理数据,得到结果,一般应用在实时性要求高的场景,如各个电商、新闻推送网站,通常用户点击几个同类的链接,就会立马计算出用户喜好。
离线计算:适合非实时性,对时效不敏感的系统。采集到的数据经过很简单的清洗,先存储起来。在有需要的时候,才进行分析处理,二次存储。

使用背景
公司业务需要,要求用户在看视频的时候,记录每次观看视频的时长。其实有点类似于“记录用户在线时长”,心跳检测。我给出了两种解决方案,1.TCP长连接;2.客户端使用http请求轮询。我个人是倾向于方案1的。结果评审时,技术大佬说部分浏览器对socket长连接兼容性不好,我没找到相关资料,不过领导说地球是方的那就是方的,而且领导对这个功能相当重视,基于方案2要保证稳定,高并发(10w),还给了个大数据采集系统的方案。我心想肯定ojbk啊,难得有机会接触大数据。

http轮询方案业务
客户端看视频时,每N分钟向服务器“打卡”(http请求),服务器接收到了请求,知道用户"仍在看视频",然后在redis上该用户的视频时长累加N分钟。另一方面,定时任务批量读取redis上所有用户所有视频的时长,然后与已经持久化在数据库的时长累加,再写库。

整体技术架构

大数据日志采集工作笔记_第1张图片
nginx:接收http请求,记录访问日志,原始数据收集。
flume:以Nginx的访问日志为数据源,整理数据格式,传输到kafka
kafka集群:功能与消息队列相似,削锋,提高吞吐量,消费者一次可以消费N条(大量)消息。
java开发的消费组:实时消费kafka日志数据,并处理业务逻辑。(此处理论上应该用storm/spark)
redis集群:临时存储消费组实时计算产生的临时视频时长。
hbase阿里云服务:保存所有日志数据,用于日后数据校验。
定时任务集群:把redis的计算结果与mysql的结果汇总,再存储回mysql。

真正的大数据处理/计算并不是手动编写Java消费程序的,通用都是storm/spark/mapRuduce等开源架构,提交任务的。这里主要是受限于团队技术栈和领导

后来,在即将进行开发时,领导发现阿里云有日志服务的方案。于是就使用阿里提供的日志服务替代了flume+kafka这项开发步骤了。。。
大数据日志采集工作笔记_第2张图片

最最后,一个人开发好了Java处理数据的项目,从采集到落地的环节都能跑通,但是所有客户端、测试、运维以及所有开发都被抽调去搞大领导的PPT上的项目了,项目暂时被无限期搁置。

文本仅随笔记录,记录了日志采集系统的整体架构,待会再写写阿里云的日志服务以及那个Java项目的设计架构。

你可能感兴趣的:(工作日志)