目前市面上稍微体量大一些的IT厂都会自建数据平台,将数据从上报,收集,存储,清洗,应用这个链路的东西都自己own起来。
现在一个公司搭建自有数据平台,大部分的框架结构都相对稳定。
这里笔者顺着数据流程将各个地方用到的技术都做一个汇总。
上报
在移动互联网时代,更多的用户日志都是从移动端上报的,移动端根据页面的不同,有native页面和H5页面,所以一般公司针对于这两种页面,分别有一套日志上报体系,然后在离线的时候把这两套上报日志合并起来。
具体的日志这里包括三个方面:前端app、pc日志上报、nginx日志、后端代码中服务日志,这几块常规的做法就是公司中间件团队封装一套SDK用于收集这些日志,期望达到最少量侵入代码的埋点方式。
收集,存储
数据采集的话根据常用的分为MySQL和日志,其中MySQL以binlog收集为主,传输和存储这块都会采用Kafka的方案,具体到业务的话可能会采用RabbitMQ的方案。
清洗
清洗这一块根据处理方式可以分为实时处理和离线处理
实时处理
多采用Storm,或者SparkStreaming,偶尔会有采用Flink,但根据市面上的大厂,更多采用的是前两者。
离线处理
多采用Hive,随着Spark的兴起,很多公司开始尝试在ETL流程中使用Spark-SQL替代Hive的任务
应用
应用这块根据服务人群不同可以分为,查询分析型、挖掘学习型
查询分析型
服务对象更多是公司高级主管或者一些运营,这里孵化最多的就是报表系统,其中采用Hive,Presto,Druid,Kylin等工具,多为开源系统。
基于查询分析可能会出现实时大盘统计等实时需求。
挖掘学习型
服务对象是用户,目的是通过一些机器学习算法达到智能化推荐,运营的目的,这里采用比较多的是Spark Mllib和基于Python的TenseFlow这种机器学习库。
算法迭代稳定上线,一般会孵化出AB系统