Apache Doris在作业帮实时数仓中的应用实践

点击上方蓝色字体,选择“设为星标”

回复”资源“获取更多惊喜

Apache Doris在作业帮实时数仓中的应用实践

Apache Doris在作业帮实时数仓中的应用实践

大数据技术与架构

点击右侧关注,大数据开发领域最强公众号!

Apache Doris在作业帮实时数仓中的应用实践

Apache Doris在作业帮实时数仓中的应用实践

大数据真好玩

点击右侧关注,大数据真好玩!

Apache Doris在作业帮实时数仓中的应用实践

在大数据生态中,数据分析系统在数据创造价值过程中起着非常关键的作用,直接影响业务决策效率以及决策质量。Apache Doris 作为一款支持对海量大数据进行快速分析的 MPP 数据库,在数据分析领域有着简单易用、高性能等优点。

本文主要介绍Doris 在作业帮实时数仓中的应用实践。

Apache Doris在作业帮实时数仓中的应用实践Apache Doris在作业帮实时数仓中的应用实践

原来的问题:

  • 部分业务使用 Kafka + Spark 对接大数据团队,复制成本高。且 Spark 集群跨越多个业务线使用,本身就给业务线带来了额外的维护成本

  • 基于ES的系统性能参差不齐,ES-Sql 语法完备性不足,如不支持 join、多列 group by(6.3 版本)等

  • 引入 druid 系统,但是 duird 的接口和其他系统的接口不一致,用户往往又得学习,且 Druid 不支持明细,一旦需要明细,就需要到 ES 去查询,由于涉及两套系统,明细和聚合数据不自洽

随着需求越来越多,系统也越来越难以维护,交付效率也特别低,需求排队非常严重。因此,提供有效而统一的查询系统,对于实时数仓建设在提高业务支持效率、降低维护成本上都具有非常重大的意义。

Apache Doris在作业帮实时数仓中的应用实践

如图所示(从下到上),原始业务层日志经数据摄入系统进入数仓,在数据清洗计算层,我们将原来基 Spark 系统升级到了 Flink,并且基于 Flink-Sql 提供了统一的数据开发框架,从原有的代码开发升级到 Sql 开发来提升数据的研发效率。

其后查询系统将 Kafka 的数据实时同步到查询引擎内,并通过 OpenAPI 的统一接口对外提供查询服务。

Apache Doris在作业帮实时数仓中的应用实践

基于Doris 架构的优点:

  • 查询的数据量较大时,可以缩短到秒级

  • 整体架构非常简单,不依赖任何第三方组件,社区支持度也非常好

业务场景

业务场景主要分两种:

  • 第一种是传统的流量类,比如算 pv、uv、活跃……

  • 第二种是面向我们业务线的工作台,例如出勤数据、课堂测验数据

Apache Doris在作业帮实时数仓中的应用实践Apache Doris在作业帮实时数仓中的应用实践Apache Doris在作业帮实时数仓中的应用实践Apache Doris在作业帮实时数仓中的应用实践

整体架构

Apache Doris在作业帮实时数仓中的应用实践

Apache Doris在作业帮实时数仓中的应用实践在我们的实践中,发现 Doris on ES 相比直接裸用 ES 或社区的其他方案如 Presto on ES 在性能上有很大的提升,接下来介绍下 Doris on ES 高性能的设计原理。

Apache Doris在作业帮实时数仓中的应用实践Doris on ES 整体的架构如图,FE 负责查询 ES 的元数据信息如 location、shard 等,BE 负责从 ES 数据节点扫描数据。

Apache Doris在作业帮实时数仓中的应用实践

Apache Doris在作业帮实时数仓中的应用实践

Apache Doris在作业帮实时数仓中的应用实践

Apache Doris在作业帮实时数仓中的应用实践

Apache Doris在作业帮实时数仓中的应用实践

Apache Doris在作业帮实时数仓中的应用实践

Apache Doris在作业帮实时数仓中的应用实践

Apache Doris在作业帮实时数仓中的应用实践

Apache Doris在作业帮实时数仓中的应用实践接下来就基于一个完整的流程来介绍下各部分系统。Apache Doris在作业帮实时数仓中的应用实践

Apache Doris在作业帮实时数仓中的应用实践

Apache Doris在作业帮实时数仓中的应用实践

Apache Doris在作业帮实时数仓中的应用实践

Apache Doris在作业帮实时数仓中的应用实践

Apache Doris在作业帮实时数仓中的应用实践

Apache Doris在作业帮实时数仓中的应用实践通过元数据的统一管理,构建的表质量都非常高。所有的表都在最大化性能的提供查询服务,且由于数据导致的查询不可用 case 为 0。且对于任何业务线的同学,不管是否了解 Doris,都可以分钟级构建出这样一张高质量的表。Apache Doris在作业帮实时数仓中的应用实践

建好表后,就是数据的写以及读。统一基于 openapi 来做。做 api 接口其实本质上也是为了在提供系统能力的前提下,进一步保障系统的稳定性和易用性。比如要控制业务线的误用(如连接数打满),提供统一的入口方便写 es、Doris,且控制数据质量……Apache Doris在作业帮实时数仓中的应用实践

Apache Doris在作业帮实时数仓中的应用实践

Apache Doris在作业帮实时数仓中的应用实践

Apache Doris在作业帮实时数仓中的应用实践

Apache Doris在作业帮实时数仓中的应用实践

因此我们基于写入端做了改进,实时数据流、离线修复数据流各自写入不同的 topic,同步服务对每个 topic 做限速消费,如实时流时效性要求高,可以配额调的大些,保证配额,离线时效性则允许配额小点,或者在业务低峰期将配额调大,并基于数据 key& 列版本存储做了过滤。这样可以保证时效性的前提下,修数也可以按照预期进行。Apache Doris在作业帮实时数仓中的应用实践最后是读的部分。

在提供 sql 能力的前提下,我们也做了一些额外的方案,比如缓存、统一的系统配置。对于系统延迟、稳定性提升都有很大的改进。并且由于统一了读接口,上述的这些改造,对于业务线来说都是透明的。Apache Doris在作业帮实时数仓中的应用实践

Apache Doris在作业帮实时数仓中的应用实践

Apache Doris在作业帮实时数仓中的应用实践

基于 Doris 模式下,我们使用微批调度的模式。

调度系统会定期(分钟级)执行一个调度任务,基于 sql join 完成数据的选取。这样哪怕在异常下,课中流查不到教师数据,这样 join 的结果只是包含了可以查到教师数据的信息, 待教师数据就绪后,即可自动补全这部分课中数据的维度。整个过程全部自动化来容错。效率非常高。

Apache Doris在作业帮实时数仓中的应用实践

因此这个模式的主要好处:

  • 业务端延迟可控、稳定性好。整个过程主要取决于调度的周期和 Sql 执行时长。调度周期可控,且由于 Doris on ES 的高性能,Sql 执行时长几乎都可以在分钟内完成。

  • 数据修复成本低、维护方便。一旦数据有异常,可以自动触发对应的数据窗口进行重新计算。

Apache Doris在作业帮实时数仓中的应用实践

最后,讲下其他方面的建议实践,这些相对简单,但是在实际的应用中非常容易忽视。

Apache Doris在作业帮实时数仓中的应用实践

Apache Doris在作业帮实时数仓中的应用实践

最后,讲下规划。Doris 在作业帮实时数仓的建设中发挥了很关键的作用。在实际的应用中,我们也发现了一些当前的一些不足。

Apache Doris在作业帮实时数仓中的应用实践

Apache Doris在作业帮实时数仓中的应用实践

Apache Doris在作业帮实时数仓中的应用实践

Apache Doris在作业帮实时数仓中的应用实践

版权声明:

本文为《大数据真好玩》整理,原作者独家授权。未经原作者允许转载追究侵权责任。

编辑|冷眼丶

微信公众号|大数据真好玩

【赞】+【在看】二连吧! ????