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

前言

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

动机

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

  • 运维层面——所有调度任务只能在业务闲时(凌晨)集中启动,集群压力大,耗时越来越长;
  • 业务层面——数据按T+1更新,延迟高,数据时效价值打折扣,无法精细化运营与及时感知异常。

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

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

指导思想:Kappa架构

一图流。

计算引擎

  • 硬性要求:
  1. 批流一体化——能同时进行实时和离线的操作;
  2. 提供统一易用的SQL interface——方便开发人员和分析人员。
  • 可选项:Spark、Flink

  • 较优解:Flink

  • 优点:

  1. 严格按照Google Dataflow模型实现;
  2. 在事件时间、窗口、状态、exactly-once等方面更有优势;
  3. 非微批次处理,真正的实时流处理;
  4. 多层API,对table/SQL支持良好,支持UDF、流式join等高级用法。
  • 缺点:
  1. 生态系统没有Spark强大(不太重要);
  2. 1.10版本相比1.9版本的改动较多,需要仔细研究。

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

  • 硬性要求:
  1. 数据in-flight——不能中途落地,处理完之后直接给到下游,最小化延迟;
  2. 可靠存储——有一定持久化能力,高可用,支持数据重放。
  • 可选项:各种消息队列组件(Kafka、RabbitMQ、RocketMQ、Pulsar、...)

  • 较优解:Kafka

  • 优点:

  1. 吞吐量很大;
  2. 与Flink、Canal等外部系统的对接方案非常成熟,容易操作;
  3. 团队使用经验丰富。

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

  • 硬性要求:
  1. 支持较大规模的查询(主要是与事实数据join的查询);
  2. 能够快速实时更新。
  • 可选项:RDBMS(MySQL等)、NoSQL(HBase、Redis、Cassandra等)

  • 较优解:HBase

  • 优点:

  1. 实时写入性能高,且支持基于时间戳的多版本机制;
  2. 接入业务库MySQL binlog简单;
  3. 可以通过集成Phoenix获得SQL能力。

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

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

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

  • Greenplum——业务历史明细、BI支持、大宽表MOLAP
  • Redis——大列表业务结果(PV/UV、标签、推荐结果、Top-N等)
  • HBase——高并发汇总指标(用户画像?)
  • MySQL——普通汇总指标、汇总模型等

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

  • ElasticSearch(ELK)——日志明细,似乎也可以用作OLAP?
  • Druid——OLAP
  • InfluxDB/OpenTSDB——时序数据

数仓分层设计

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

元数据管理

  • 必要性:
    Kafka本身没有Hive/GP等传统数仓组件的metastore,必须自己维护数据schema。
    (Flink 1.10开始正式在Table API中支持Catalog,用于外部元数据对接。)

  • 可行方案:

  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作业管理

  • 必要性:
    实时数仓平台展现给分析人员的开发界面应该是类似Hue的交互式查询UI,即用户写标准SQL,在平台上提交作业并返回结果,底层是透明的。
    但仅靠Flink SQL无法实现,需要我们自行填补这个gap。

  • 可行方案:AthenaX(由Uber开源)
    该项目比较老旧,是基于Flink 1.5构建的,预计需要花比较多的时间精力来搞二次开发。

  • 流程:用户提交SQL → 通过Catalog获取元数据 → 解释、校验、优化SQL → 编译为Flink Table/SQL job → 部署到YARN集群并运行 → 输出结果

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

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

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

性能监控

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

  • 算子数据吞吐量(numRecordsInPerSecond/numRecordsOutPerSecond)
  • Kafka链路延迟(records-lag-max)→ 如果搞全链路延迟,需要做数据血缘分析

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

数据质量保证

  • 手动对数——旁路写明细表,定期与数据源交叉验证
  • 自动监控——数据指标波动告警 etc.

The End

民那晚安晚安。

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,529评论 5 475
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,015评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,409评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,385评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,387评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,466评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,880评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,528评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,727评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,528评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,602评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,302评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,873评论 3 306
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,890评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,132评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,777评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,310评论 2 342