随着公司业务的逐步扩展,公司数据量随之增大,老板、运营、产品等需要看很多数据报表,有T+1每天早上看,有实时的在报表平台上每天看,所以需要有效管理自己的数据,来满足多样化的数据需求,所以如何建立起高效的数据体系,就是非常重要的问题。
一、背景
有些公司部门的数据组织非常凌乱,离线几乎所有报表都是从底层数据直接计算得来,实时的则是一个报表一个任务,同事之间需求几乎都是各做各的,几乎没有什么关联,就导致了前一个人做的指标只有后一个需要,而后一个人又要重新计算一遍,严重降低工作效率。而需求方那边需要赶时间,催的紧,而且有些需求中指标相同的,发现两个人前后计算出来差异很大。
在数据规范方面,每个人都需要紧盯自己手里的事情,耗时耗力,若是有人请假或者离职,基本上他手上工作再怎么交接也是有很多遗漏。所以就需要建立一个统一的数据应用平台,将离线和实时仓库规范化,主要为了降低数据使用成本、规范组织数据和快速完成需求的目的。
接下来几篇文章将介绍这几年我在工作主要做的大数据体架构系,从离线数仓到实时数仓的架构设计,本节文章主要介绍工作期间设计数据平台整体架构。
二、数据平台整体架构
如图所示,整体架构中一共分为5个部分,分别是数据同步部分,离线数仓、实时数据仓库、元数据管理、数据监控,只有五部分完善化,才能做到数据高效同步、数据易于使用、数据问题及时发现,达到需求快速迭代和提高用户提要的目的,接下来将简要介绍模块内容。
1、数据同步平台
由于每天需要同步大量的数据,新数据源需要建立大量的数据表,也要满足同步数据时能保证最大程度保持与数据源一致的情况,所以一个稳定、高效、减少维护成本与配置成本的数据同步工具显得十分重要。所以在离线数据同步方面,主要设计原则围绕简单配置减少人工配置成本、自动修改目标结构减少期维护成本、分布式数据拉取降低数据同步时间、易于扩展增加未知数据源、自动数据预警第一时间发现问题等方面进行数据同步工具设计。
采集端的架构主要由离线和实时部分组成,离线部分主要针对数据库进行同步,如mysql、mongo、ES、网盘数据、外部集群数据等高效数据采集。实时部分主要对埋点数据、数据库日志等数据进行实时接入,来满足上层数据模型以及需求需要。
在对比调研sqoop和Datax后,我们最终决定自己研发一套高灵活的数据同步工具。在配置过程中,只需指定需要的库和表既可自动生成后续使用的目标表。同时在工程运行过程中,可自行探查数据源数据是否发生过变动,若发生变动则修改对应边结构,发出预警。
目前该工具在团队中已经广泛使用,较之前数据同步开发时间减少90%以上,减少人工维护次数5000+次,发现业务库数据问题400+次,支持mysql,mongo、es,网盘数据,集群数据拉取等.
实时数据同步方面,主要针对于埋点数据和数据库日志数据,在数据流入的同时,会进行相应的实时数据清洗、去重、统一、离线落库、分发,将数据进行统一整合,下游使用数据只要订阅相应的数据即可使用实时数据。
2、离线数据仓库
离线数据仓库是数据平台核心工具之一,主要为T+1数据报表做数据准备。离线数据仓库在设计方面一共分为4个层次,分别是ods、dwd、dws、dw四个层次,其中ods和原始数据相同的数据结构,dwd层主要采用维度建模或DV模型的通用数据仓库模型。
将公司的各条业务线用统一的数据模型进行数据组织,有效的屏蔽底层数据的变化对上层应用的影响是数据仓库最核心部分,dws主要是通用宽表层,采用宽表的形式对数据进行组织,虽然违反了数据设计范式,增加了数据冗余,但提高查询性能使用方便,也能更好的描述整个业务流程,同时方便dw层使用。
3、实时数据仓库
实时数据仓库也是数据平台中最核心部分之一,主要为实时报表提供数据支撑。在设计方面数据组织采用和离线相似的数据组织结构,ods、dwd、dws、dw。实时数据仓库亮点在于设计了一套自己的sql解析与执行引擎,将实时的数据开发变成sql化的开发,脱离了以往一个实时需求一套代码的困境,也降低了使用者的门槛。
目前实时数据仓库拥有sql解析与执行能力,同时也拥有跨不同数据源查询与存储能力,底层采用TIDB、redis、ES、HBASE等不同介质存储数据。而数据存储的原则则是不同的数据存储在自己合适的数据库中,如事实表存储在tidb中,维表在redis、日志在ES等。在整体的自研的SQL引擎的加持下,用sql进行数据开发,提高了整个团队的实时开发效率。
4、元数据管理
元数据是一个数仓体系中比较重要的部分,元数据被称为数据的数据,我们使用元数据主要描述了哪些数据在数据仓库中、数据仓库数据组织形式,数据产生时间,ETL执行时间、数据命名、血缘等数据情况。可用元数据体系来约束指标命名、数仓逻辑架构、指导数据开发、指标问题监控、资源问题整合等工作。
有了元数据管理以后,数仓数据更加规范化,如字段名、表名等有了约束,可以做到一致性,ETL编写更加规范、资源使用更加合理、调度时间更加合理、数据来源更加清晰,指标监控易于监控,数据主题逻辑更加清晰。
5、数据监控
目前为了保证数仓数据准确性,在缺乏合理的数据治理前提下,建设了数据监控体系,主要是为了保障整个数据系统的准确定、一致性、完整性和及时性。整个数据监控体系主要涵盖2个方面——技术指标监控和业务指标监控,其中技术指标监控包含了平台资源监控和ETL监控,如hdfs内存、存储、小文件,任务监控,如执行时长、执行正确或错误。业务监控,如业务指标异常、业务库数据量异常等任务监控。
以下是数据监控模块主要设计,兼容了离线和实时两部分,目前该套监控体系运行2年多,数据存储由原来3个数据源扩展为7个数据源,只进行了最初一次迭代。同时发现了1000+次业务和技术问题,也为业务系统提供业务监控功能。