Doris和Flink在实时数仓实践

一、Doris简介
1.1 简介
Apache Doris是一个现代化的MPP分析型数据库产品。仅需亚秒级响应时间即可获得查询结果,有效地支持实时数据分析。Apache Doris的分布式架构非常简洁,易于运维,并且可以支持10PB以上的超大数据集。
Apache Doris可以满足多种数据分析需求,例如固定历史报表,实时数据分析,交互式数据分析和探索式数据分析等。令您的数据分析工作更加简单高效!
1.2 架构
在这里插入图片描述
想要了解更多doris,可以去官网学习Apache Doris,Flink我也不赘述了,说多了,今天讲不完。
我们的业务背景,就是想秒级实时数据呈现。
二、进入正题
2.1 我们的历史架构
在这里插入图片描述
数据量介绍:
a.请求百亿级
b.曝光亿级
c.点击百万级
d.其他数据就不说了,我就简单讲哈哈。
2.2 遇到的问题
计算问题:
a. 多表join不易维护
b. sql化还要实现各种udf函数
c. 开发耗时
存储问题:
a. 宽表需要多流join,还得关联维度表
b. es不支持join,需要提前加工好宽表
c. es大量聚合查询性能下降
d. es-sql,计算函数支持不优雅,比如:除法等等
e. es没有聚合模型,全量写入会带来写入压力和冗余数据,需要依托flink窗口预计算来减轻写入压力。缺点:flink窗口小,写入量大带来数据冗余和写入性能差;flink窗口大,写入数据量会减少,数据时效性差,无法满足模型训练秒级别的需求
2.3 解决问题
计算替代思考🤔?
a.多流join,能否在近实时的olap引擎中去做?
b.用olap引擎做能带给我们什么价值?
c.web接口服务提供的维度数据如何办?olap也没法实时查询接口服务呀,还有kv内存得维度数据,这些都需要flink去扩充。mysql的数据也可以用flink扩充,也可以自己通过脚本写入到olap中。
结论:doris可以替代flink做join计算,并且doris的udf函数齐全,自带colocate join模型(按照相同key分桶,join的时候可以避免网络shuffle)和聚合模型(降低数据量,提升查询效率),还有好多优势,我就不多说了,doris真的是个神器。
在这里插入图片描述
看上面👆这个图,你就知道doris的优势了,千万级数据join,秒级产出,非常赞👍。
存储替代思考🤔?
a.为什么es不支持join,我们还要去用他?为什么不能替换?
b.什么组件替换比较好呢?行业内都在用什么组件?
在这里插入图片描述
总结:直接换成doris,es本身就不适合做olap多维聚合分析,尤其是在join的场景,无法满足业务需求。
a.计算上olap可以替代部分flink的join任务:
b.两个kafka流做join,无需关联kv和接口维度数据,比如点击流+唤起流+mysql维度信息(多个mysql表),可以直接在doris中做join,无需单独开发flink去做,复用doris的udf函数。(目前我在doris中都是进行4表join非常方便,千万级数据join性能在2-3s返回)
c.mysql可以写个定时任务写入到doris中
d.hive的维度数据也可以导入到doris中进行维度关联。
最后架构:
在这里插入图片描述
总结:doris内部做join可以节省开发时间,并且自已维护,不用考虑数据延迟落后的问题。doris内部自带物化视图,既可以存明细,也可以实现聚合模型,既方便报表查询,也方便线上通过明细数据问题排查,同时还方便维护,模型训练也支持秒级查询。
为什么我要all in 这个doris
a.es无法进行join计算
b.druid进行join计算还不够强大(虽然新版0.18.0本支持了join语法)
c.clickhouse运维复杂(还是长期看好,性能是个亮点)
d.kylin的cube爆炸,计算和管理成本高。
浅谈不到位的,还请各位大佬多多指点.
三、业务数仓架构应该具备哪些能力? a.业务经常变动打法,你的实时数据仓不能构建的太重,需要短时间迭代上线(大家没有遇到业务提一个需求,一个月时间做完了,业务用了几次就不用了,还有就是公司改变广告营销打法,之前的实时指标可能没人去看了,打入冷宫了)。 b.你的架构要足够的轻量化,易维护,同时还得兼顾:明细查询(线上问题排查),聚合查询(报表指标呈现) 业务看重的是你支持业务的能力,而不是你花里胡哨的架构。你要确保业务当天提需求,当天可以完成,你的架构好坏是靠你支持业务的效果来体现,所以适合自己业务的架构,就是好架构。 c.你的架构平时稳只能算及格,你要确保架构在大促和高峰流量来时系统稳定,能不能抗住百亿或者千亿的流量。 d.不同sla的业务场景设计不同的架构,并不是所有的业务场景都是要求毫秒或者秒级,其实你仔细跟他们聊分钟级他们也可以接受,不同的sla对你的计算资源成本要求不一样,适量把控计算资源成本,优秀的工程师都是想办法给公司省钱,同时还可以圆满完成任务。