正文
从数据架构图来看,顺风车实时数仓和对应的离线数仓有很多类似的地方。例如分层结构;比如ODS层,明细层,汇总层,乃至应用层,他们命名的模式可能都是一样的。但仔细比较不难发现,两者有很多区别:
1)与离线数仓相比,实时数仓的层次更少一些:
-
从目前建设离线数仓的经验来看,数仓的数据明细层内容会非常丰富,处理明细数据外一般还会包含轻度汇总层的概念,另外离线数仓中应用层数据在数仓内部,但实时数仓中,app应用层数据已经落入应用系统的存储介质中,可以把该层与数仓的表分离;
-
应用层少建设的好处:实时处理数据的时候,每建一个层次,数据必然会产生一定的延迟;
-
汇总层少建的好处:在汇总统计的时候,往往为了容忍一部分数据的延迟,可能会人为的制造一些延迟来保证数据的准确。举例,在统计跨天相关的订单事件中的数据时,可能会等到 00:00:05 或者 00:00:10再统计,确保 00:00 前的数据已经全部接受到位了,再进行统计。所以,汇总层的层次太多的话,就会更大的加重人为造成的数据延迟。
接下来,根据顺风车实时数仓架构图,对每一层建设做具体展开:
根据顺风车具体场景,目前顺风车数据源主要包括订单相关的binlog日志,冒泡和安全相关的public日志,流量相关的埋点日志等。这些数据部分已采集写入kafka或ddmq等数据通道中,部分数据需要借助内部自研同步工具完成采集,最终基于顺风车数仓ods层建设规范分主题统一写入kafka存储介质中。
命名规范:ODS层实时数据源主要包括两种。
根据顺风车业务过程作为建模驱动,基于每个具体的业务过程特点,构建最细粒度的明细层事实表;结合顺风车分析师在离线侧的数据使用特点,将明细事实表的某些重要维度属性字段做适当冗余,完成宽表化处理,之后基于当前顺风车业务方对实时数据的需求重点,重点建设交易、财务、体验、安全、流量等几大模块;该层的数据来源于ODS层,通过大数据架构提供的Stream SQL完成ETL工作,对于binlog日志的处理主要进行简单的数据清洗、处理数据漂移和数据乱序,以及可能对多个ODS表进行Stream Join,对于流量日志主要是做通用的ETL处理和针对顺风车场景的数据过滤,完成非结构化数据的结构化处理和数据的分流;该层的数据除了存储在消息队列Kafka中,通常也会把数据实时写入Druid数据库中,供查询明细数据和作为简单汇总数据的加工数据源。
命名规范:DWD层的表命名使用英文小写字母,单词之间用下划线分开,总长度不能超过40个字符,并且应遵循下述规则:realtime_dwd_{业务/pub}_{数据域缩写}_[{业务过程缩写}]_[{自定义表命名标签缩写}]
命名规范:DIM层的表命名使用英文小写字母,单词之间用下划线分开,总长度不能超过30个字符,并且应遵循下述规则:dim_{业务/pub}_{维度定义}[_{自定义命名标签}]: