Doris在一点资讯自媒体平台的应用
三寸九州 发布于2021-04 浏览:1999 回复:0
0
收藏

6月29日,Doris有幸得到中国信通院云大所、大数据技术标准推进委员会的支持,在中国信通院举行了0.11.0新版本预览线下沙龙。各位嘉宾都带来了干货满满的分享。关注Doris官方公众号,后台回复“0629”即可获取各位嘉宾分享PPT及现场录像。

 

 

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

 

 

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

 

需求背景

 

 

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

 

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

 

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

 

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


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

 

 

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

 

Why Doris

 

 

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

 

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

 

应用Doris 到Nebula

 

 

这是一张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实现活跃账号表

 

监控

 

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

 

使用心得

 

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

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

•   利用rollup满足各种需求

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

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

•   join表多副本

•   单分区、复合分区并存

 

 

此次沙龙我们有幸邀请到了来自一点资讯、京东、搜狐、百度智能云的技术大牛带来他们的应用实践和开发分享。

 

 

其他嘉宾的分享会在近日放出,欢迎关注Apache Doris(incubating)官方公众号,后台回复“0629”即可获取各位嘉宾分享PPT及现场录像。

 

 

欢迎扫码关注:

Apache Doris(incubating)官方公众号

 

相关链接:

Apache Doris官方网站:

http://doris.incubator.apache.org

Apache Doris Github:

https://github.com/apache/incubator-doris

Apache Doris Wiki:

https://github.com/apache/incubator-doris/wiki

Apache Doris 开发者邮件组:

dev@doris.apache.org

收藏
点赞
0
个赞
快速回复
TOP
切换版块