2.3 项目业务概述
2.3.1 采集模块业务描述
采集模块主要分为两部分:用户行为数据的采集和业务数据的采集,如图2-3所示。
图2-3 采集模块数据流程
用户行为数据是指用户在使用产品的过程中与客户端交互产生的数据,比如页面浏览、点击、停留、评论、点赞、收藏等。用户行为数据通常存储在服务器的日志文件中,而且是随着用户对产品的使用不断生成的,所以对此类数据的采集需要考虑到对多台服务器的落盘文件的监控,避免采集系统宕机造成数据丢失。采集到的用户行为数据可能有多种类型,在采集过程中需要对数据进行初步分类,可能还需要对数据进行初步清洗,将不能用于分析的非法数据删除。针对这些问题,要求采集系统监控多个日志产生文件夹并能够做到断点续传,实现数据消费至少一次(at least once)语义,能够根据采集到的日志内容对日志进行分类采集落盘,发往不同的Kafka topic。Kafka作为一个消息中间件起到日志缓冲的作用,避免同时发生的大量读/写请求造成HDFS性能下降,能对Kafka的日志生产采集过程进行实时监控,避免消费层Flume在落盘HDFS过程中产生大量小数据文件,从而降低HDFS的运行性能,并对落盘数据采取适当压缩措施,尽量节省存储空间,降低网络I/O。
业务数据就是各企业在处理业务过程中产生的数据,如用户在电商网站中注册、下单、支付等过程中产生的数据。业务数据通常存储在MySQL、Oracle、SQL Server等关系数据库中,并且此类数据是结构化的。为什么不能直接对业务数据库中的数据进行操作,而要将其采集到数据仓库中呢?实际上,在数据仓库技术出现之前,对业务数据的分析采用的就是简单的“直接访问”方式,但是这种访问方式产生了很多问题,例如,某些业务数据出于安全性考虑不能直接访问,误用业务数据对系统造成影响,分析工作对业务系统的性能产生影响。
业务数据的采集与用户行为数据的采集需要考虑的问题截然不同。首先,需要根据现有需求和未来的业务需求,明确抽取的数据表,以及必需字段。其次,确定抽取方式,包括从源系统联机抽取或者间接从一个脱机结构抽取数据。最后,根据数据表性质的不同制定不同的数据抽取策略(全量抽取或者增量抽取)。在本数据仓库项目中,全量抽取的业务数据表使用DataX采集,直接落盘至HDFS。增量抽取的数据表采用Maxwell监控数据变化并及时采集发送至Kafka中,再通过Flume将Kafka中的数据落盘至HDFS。