【遇见 Doris】Apache Doris 在一点资讯自媒体平台的应用
6 月 29 日,Doris 有幸得到中国信通院云大所、大数据技术标准推进委员会的支持,在中国信通院举行了 0.11.0 新版本预览线下沙龙。各位嘉宾都带来了干货满满的分享。关注 Doris 官方公众号,后台回复“0629”即可获取各位嘉宾分享 PPT 及现场录像。
今天是王迎信同学代表一点资讯自媒体平台带来的关于 Apache Doris (incubating)的应用介绍。
需求背景
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
版权声明: 本文为 InfoQ 作者【ApacheDoris】的原创文章。
原文链接:【http://xie.infoq.cn/article/70bbf94355aaa26bfdcac3dc6】。文章转载请联系作者。
评论