大数据分析——Apache Doris(六十三)

179 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第17天,点击查看活动详情

  • Flink双写

将所有Flink Job改写,在写入Elasticsearch的时候旁路输出一份数据到Kafka,并对复杂嵌套数据创建下游任务进行转化发送到Kafka,Doris使用Routine Load导入数据。

  • 数据同步

原来我们使用ES的时候,由于很多表没有数据写入时间,数据分析师需要每天扫全表导出全量数据到Hive,这对我们的集群有很大压力,并且也会导致数据延迟上升,我们在引入了Doris后,对所有数仓表都添加 eventStamp, updateStamp, deleted这三个字段。

  • eventStamp:事件发生时间

  • updateStamp:Doris数据更新时间,在Routine Load中生成

  • deleted:数据是否删除,由于我们很多实时数仓需要定时同步到离线数仓,所以数据需要采取软删除的模式

  • 数据对下游同步时可以灵活的选择eventStamp或者updateStamp进行增量同步。数据同步我们采用了多种方式,通过Hive表名后缀来决定不同同步场景:

  • _f:每天/每小时全量同步,基于Doris Export全量导出

  • _i:每天/每小时增量同步,基于Doris Export按分区导出/网易易数扫表导出

  • _d:每天镜像同步,基于Doris Export全量导出

  • 指标域划分/数据分层

将Elasticsearch中的数据进行整理并结合后续的业务场景。

 

根据上面的指标域,我们基于星型模型开始构建实时数仓,在Doris中构建了20余张数仓底表以及10余张维表,通过网易易数构建了完整的指标系统。

 

  • 微批生成DWS/ADS层

由于我们多数场景都是明细+聚合数据的分析,所以我们基于Doris insert into select的导入方式,实现了一套定时根据DWD层数据生成DWS/ADS层数据的逻辑,延迟最低可以支持到分钟级。

对于明细数据在TiDB或者ES的,我们选择了在Flink中进行窗口聚合写入到下游Doris或者ES中。而对于明细数据只在Doris单独存在的数据,由于我们大部分使用了异步写入的方式,所以数据无法立即可读,我们在外围构建了支持模版化配置的定时执行引擎,支持分钟/小时级别的扫描明细表变更写入下游聚合表。