数据仓库技术方案大数据

建设实时数仓之前的思考与方案记录

2020-03-20  本文已影响0人  LittleMagic

前言

随着这次新冠疫情带来的机遇,我司业务飞速增长,实时数仓的建设已经提上了日程。虽然还没有正式开始实施,但是汲取前人的经验,做好万全的准备总是必要的。本文简单松散地记录一下想法,不涉及维度建模方法论的事情(这个就老老实实去问Kimball他老人家吧)。

动机

随着业务快速增长,传统离线数仓的不足暴露出来:

实时数仓即离线数仓的时效性改进方案,从原本的小时/天级别做到秒/分钟级别。

底层设计变动的同时,需要尽力保证平滑迁移,不影响用户(分析人员)之前的使用习惯。

指导思想:Kappa架构

一图流。

计算引擎

  1. 批流一体化——能同时进行实时和离线的操作;
  2. 提供统一易用的SQL interface——方便开发人员和分析人员。
  1. 严格按照Google Dataflow模型实现;
  2. 在事件时间、窗口、状态、exactly-once等方面更有优势;
  3. 非微批次处理,真正的实时流处理;
  4. 多层API,对table/SQL支持良好,支持UDF、流式join等高级用法。
  1. 生态系统没有Spark强大(不太重要);
  2. 1.10版本相比1.9版本的改动较多,需要仔细研究。

底层(事实数据)存储引擎

  1. 数据in-flight——不能中途落地,处理完之后直接给到下游,最小化延迟;
  2. 可靠存储——有一定持久化能力,高可用,支持数据重放。
  1. 吞吐量很大;
  2. 与Flink、Canal等外部系统的对接方案非常成熟,容易操作;
  3. 团队使用经验丰富。

中间层(维度数据)存储引擎

  1. 支持较大规模的查询(主要是与事实数据join的查询);
  2. 能够快速实时更新。
  1. 实时写入性能高,且支持基于时间戳的多版本机制;
  2. 接入业务库MySQL binlog简单;
  3. 可以通过集成Phoenix获得SQL能力。

高层(明细/汇总数据)存储/查询引擎

根据不同的需求,按照业务特点选择不同的方案。

当前已大规模应用,可随时利用的组件:

当前未有或未大规模应用的组件:

数仓分层设计

参照传统数仓分层,尽量扁平,减少数据中途的lag,草图如下。

元数据管理

  1. 外部存储(e.g. MySQL) + Flink ExternalCatalog
  2. Hive metastore + Flink HiveCatalog(与上一种方案本质相同,但是借用Hive的表描述与元数据体系)
  3. Confluent Schema Registry (CSR) + Kafka Avro Serializer/Deserializer
    现在仍然纠结中。

CSR是开源的元数据注册中心,能与Kafka无缝集成,支持RESTful风格管理。producer和consumer通过Avro序列化/反序列化来利用元数据。

SQL作业管理

重点仍然是元数据问题:如何将AthenaX的Catalog与Flink的Catalog打通?

需要将外部元数据的对应到Flink的TableDescriptor(包含connector、format、schema三类参数),进而映射到相应的TableFactory并注册表。

另外还需要控制SQL作业对YARN资源的占用,考虑用YARN队列实现,视情况调整调度策略。

性能监控

使用Flink Metrics,主要考虑两点:

其他方面待定(毕竟我不是专业搞监控系统的)

数据质量保证

The End

民那晚安晚安。

炒鸡感谢@小阿妩 提供思路~

上一篇 下一篇

猜你喜欢

热点阅读