【遇见Doris 2019.06.29】Apache Doris在一点资讯自媒体平台的应用

今天是 王迎信 同学代表 一点资讯自媒体平台 带来的关于Apache Doris (incubating)的应用介绍。

一点资讯自媒体平台的主要业务内容与自媒体、内容、审核、MCN、CPM、profile相关。本次,迎信将从工程业务的角度来分享使用Doris的经验。

80e417affefbb4d7508f4f8e2b2a1d1 需求背景eaed89cb4934f1dba73c02aee204c71

2018年年中,一点资讯自媒体平台接到了 历史多维动态分析 的需求。

所谓 动态 ,是指维度表是有可能实时变化的。比如在自媒体场景下,自媒体有领域属性,此刻是科技领域,下一刻有可能会变成教育领域。

所谓 历史 ,是指业务方需要知道任何一个时刻的具体值。例如需要知道某个自媒体在历史所由时刻的领域属性来进行业务分析。

所谓 多维 ,是指在真实的业务场景中,自媒体维度可能达到大几十个。

而在此基础之上的 分析 ,需要支撑任何时间段、任意指定的属性的查询,并结合自媒体指标数据进行分析。

自媒体平台遇到的主要困难包含这6个方面。原有的解决方案均表现欠佳。于是自媒体平台开始寻找新的OLAP系统解决这一需求。

80e417affefbb4d7508f4f8e2b2a1d1 Why Doriseaed89cb4934f1dba73c02aee204c71

选择Doris的主要原因是Doris提供 良好的join查询 ,在多维、历史的动态查询情境下join是难以避免的计算操作。

Doris不仅 支持明细数据 ,并且在 响应时间、运维、学习成本 等方面都有着很出色的表现。

80e417affefbb4d7508f4f8e2b2a1d1 应用Doris 到Nebula123

这是一张Nebula自媒体数据平台的架构图。整体来看可以粗略地将平台分为数据的 同步查询 两个方面。首先先对平台做一个简要介绍。

数据同步 主要有四条线:

• MySQL

• 导出全量数据的基础库,解析成响应的事实表和维度表

• 订阅数据库变更日志(Canal,保证数据的有序性和一致性),并发送到Kafka以便适应多个消费者。

• Stream

• 处理来自kafka的指标数据(百亿)

• 来自MySQL产生的数据(千万)

• Hive

• 利用hive同步HDFS数据到Doris中间表

• Doris:(例如打标签)利用Doris统计出的维度数据再对Doris中的数据打标签

数据落地的结构和目的地

• 落地结构

• 多表、多源实时映射多维结果表(ETL)

• 映射为中间表,供insert into select使用(某些不需要实时映射的数据,减少资源消耗)

• 目的地

• Redis(近实时同步的数据,可最为其他表的参照表)

• Doris(本地文件使用Mini Load命令导入Doris)

• HDFS(备份数据到HDFS,使用Broker Load导入Doris作为Mini Load的补充)

• Kafka(可供其他系统处理)

• 导入到其他库ES,Druid,MySQL,HBase

在这个过程中,一点资讯的同学也对数据同步的方案进行了优化。

原始的处理方案使用增量数据处理方案,使用多消费终端消费,并解析、join其他参照表的数据。这样的缺点是需要大量的机器进行数据处理,对于对于后续的扩展有硬性要求(扩展机器节点)。

经过改进,根据业务逻辑, 把Topic分为两种 ,一种为 实时性要求高 的,对其他参照表数据维度实时性要求高的(如实时数据监控,每条数据均需要实时的维度数据)。对于这类需求使用原始的处理方案。

另一类需求为 对实时性要求不高 的业务,则选择始终Hive + Doris Join & Insert的方案。即使用Topic延时写入HDFS的数据,利用Hive预聚合(一些定任务),在Doris建立临时表,使用Broker Load导入Doris临时表,按照小时级别对表进行Join & Insert的方式导入到数据表中。

数据查询:

查询架构如图,在查询层一点资讯的同学也做了很多工作:

设计了Nebula查询协议

  • 抽象出查询字段、过滤字段、聚合字段、结果字段等信息,进行虚拟化
  • 扩展信息(比如前端页面显示结果的信息)

Logic Table虚拟表

  • 定义根据业务场景定义Logic Table,包括表字段,类型,取值范围等等。
  • 挂载多种实现的DataSource
  • route 、load balance、retry

Nebula编译器

  • 根据不同DataSource编译成不同的执行过程

特点

  • 解耦数据源、灵活切换、对上层透明

例子

  • Doris实现活跃账号表

80e417affefbb4d7508f4f8e2b2a1d1 监控eaed89cb4934f1dba73c02aee204c71

同时,一点资讯也构建了完整的 监控系统 。包括对Doris、Nebula流程的 基础监控 ;以及基于异常数据波动、停更账号、异常文章等业务场景的 业务监控 。完善了整个平台的功能和体验。

80e417affefbb4d7508f4f8e2b2a1d1 使用心得eaed89cb4934f1dba73c02aee204c71

• 维度数据尽量用数值类型

• join时子表尽量过滤数据以加快速度

• 利用rollup满足各种需求

• 缓存count数,当count计算结果不会出现变化且数据量非常大时可以提升效率

• 利用冗余value字段:因为value会变化,因此可以利用value冗余来直接进行更新

• join表多副本

• 单分区、复合分区并存

原文链接:https://mp.weixin.qq.com/s/K5eBUT6RjoQa0k6qJZs2VQ