作者|徐榜江 余文兵 赵红梅
随着大数据的迅猛发展,企业越来越器重数据的价值,这就意味着须要数据尽快达到企业剖析决策人员,以最大化施展数据价值。企业最常见的做法就是通过构建实时数仓来满足对数据的疾速摸索。在业务建设过程中,实时数仓须要反对数据实时写入与更新、业务麻利疾速响应、数据自助剖析、运维操作便捷、云原生弹性扩缩容等一系列需要,而这就依赖一个弱小的实时数仓解决方案。阿里云实时计算 Flink 版(以下简称“阿里云 Flink”)提供全增量一体化数据同步技术、弱小的流式 ETL 等能力,反对海量数据实时入仓入湖。阿里云 Hologres 作为新一代实时数仓引擎能同时解决 OLAP 多维分析、在线服务、离线数据减速等多个业务查问场景,通过阿里云 Flink 与 Hologres 的强强联合,实现全链路的数据摸索实时化、数据分析麻利化,疾速助力业务构建企业级一站式实时数仓,实现更具时效更智能的业务决策。
在本文中,咱们将会介绍阿里云 Flink、阿里云 Hologres 在构建实时数仓上所具备的外围能力以及二者联合的最佳解决方案,用户通过阿里云 Flink+Hologres 实时数仓解决方案,能够显著升高数仓建设门槛,让数据施展更大的价值,助力各行各业实现数字化降级。
Flink CDC 外围能力
Apache Flink 是开源的大数据流式计算引擎,反对解决数据库、Binlog、在线日志等多种实时数据,提供端到端亚秒级实时数据分析能力,并通过规范 SQL 升高实时业务开发门槛。随同着实时化浪潮的倒退和深入,Flink 已逐渐演进为流解决的领军角色和事实标准,并蝉联 Apache 社区最沉闷我的项目。
Flink CDC 是阿里云计算平台事业部 2020 年 7 月开源的一款数据集成框架,与 Flink 生态深度交融,具备全增量一体化、无锁读取、并发读取、分布式架构等技术劣势,既能够代替传统的 DataX 和 Canal 工具做数据同步,也反对数据库数据实时入湖入仓,同时还具备弱小的数据加工能力。
在构建实时数仓的过程中,数据采集是必须的组件。在传统的 ETL 架构里,采集层国外用户通常抉择 Debezium,国内用户则习惯用 DataX 和 Canal,采集工具负责采集数据库的全量数据和增量数据。采集到的数据会输入到消息中间件如 Kafka,而后通过 Flink 计算引擎实时生产消息中间件数据做计算层的数据荡涤和数据加工,加工实现后再写入目标端(装载层),通常是各种数据库、数据湖和数据仓库。在传统 ETL 链路中,数据采集工具与音讯队列是比拟重的组件,可能保护在不同的团队,在上游的数据源有业务变更或者这些组件须要降级保护时,整个链路的保护老本会十分大。
通过应用 Flink CDC 去替换上图中的数据采集组件与音讯队列,将采集层(Extraction)和计算层(Transformation)合并,简化了整个 ETL 剖析链路,用户能够应用更少的组件实现数据链路的搭建,整体架构带来更低的运维开销和更少的硬件老本、更好的数据链路稳定性、以及升高端到端的数据提早。除了稳定性的晋升,Flink CDC 的另一个劣势就是用户只须要写 SQL 脚本就能实现 CDC 数据的荡涤,加工和同步,极大地升高了用户应用门槛。
除全增量一体化同步能力外,阿里云 Flink CDC 还提供了表构造变更主动同步、整库同步、分库分表合并同步等诸多企业级个性,不便用户疾速买通数据孤岛,实现业务价值。
1.1 全增量一体化同步
Flink CDC 通过增量快照读取算法在开源数据集成畛域率先反对了无锁读取、并行读取、断点续传、不丢不重四个重要个性。其中无锁读取彻底解决了数据同步对上游业务数据库的死锁危险,并行读取很好地满足了海量数据同步的需要,断点续传和不丢不重个性则是晋升了同步链路的稳定性和可靠性。
增量快照读取算法的外围思路就是在全量读取阶段把表分成一个个 chunk 进行并发读取,在进入增量阶段后只须要一个 task 进行单并发读取 Binlog 日志,在全量和增量主动切换时,通过无锁算法保障一致性。这种设计在进步读取效率的同时,进一步节约了资源,实现了全增量一体化的数据同步。配合阿里云实时计算产品提供的资源主动调优个性,Flink CDC 作业的资源能够做到主动扩缩容,无需手动染指。
1.2 表构造变更主动同步
随着业务的迭代和倒退,数据源的表构造变更是常常会产生的操作。用户须要及时地去批改数据同步作业以适配最新的表构造,这一方面带来了较大的运维老本,也影响了同步管道的稳定性和数据的时效性。阿里云 Flink 反对通过 Catalog 来实现元数据的主动发现和治理,配合 CTAS(Create Table AS)语法,用户能够通过一行 SQL 实现数据的同步和表构造变更主动同步。
Flink SQL> USE CATALOG holo;
Flink SQL> CREATE TABLE user AS TABLE mysql.`order_db`.`user`;
CTAS 语句会解析成一个 Flink 作业执行,这个 Flink 作业源头反对读取数据变更和表构造变更并同步到上游,数据和表构造变更都能够保障程序,上述 CTAS 语句运行时构造变更同步的成果如下图所示。
示例如果在上游 MySQL 的 user 表中新增一列 age,并插入一条 id 为 27,年龄为 30 的记录。
MySQL> ALTER TABLE `user` ADD COLUMN `age` INT;
MySQL> INSERT INTO `user` (id, name, age) VALUES (27, 'Tony', 30);
user 表上的数据和构造变更都能实时地主动同步到上游 Hologres 的 user 表中,id 为 12,16 和 19 的历史数据,新增的列会主动补 NULL 值。
1.3 整库同步
在实时数仓构建中,用户常常须要将整个数据库同步到数仓中做进一步的剖析,一张表一个同步作业的形式岂但浪费资源,也会给上游数据库产生较大的压力。针对这类用户痛点,阿里云 Flink CDC 提供了整库同步个性。整库同步性能通过 CDAS (Create Database AS) 语法配合 Catalog 实现。
Flink SQL> USE CATALOG holo;
Flink SQL> CREATE DATABASE holo_order AS DATABASE
mysql.`order_db` INCLUDING ALL TABLES;
例如 MySQL Catalog 和 Hologres Catalog 配合 CDAS 语法,能够实现 MySQL 到 Hologres 的全增量数据同步。CDAS 语句会解析成一个 Flink 作业执行,这个 Flink 作业主动解析源表的表构造及相应的参数,并将指定的一个或多个数据库同步到上游 Hologres 数仓中,整个过程用户无需手写 DDL 语句,无需用户在 Hologres 提前创立表,就能疾速实现数据的整库同步。
CDAS 作业默认提供表构造变更同步能力,所有表的构造变更都会依照产生程序同步至上游 Hologres 实时数仓,CDAS 语法也反对过滤不须要同步的表。
1.4 分库分表合并同步
分库分表是高并发业务零碎采纳的经典数据库设计,通常咱们须要将分库分表的业务数据汇聚到一张数仓中的大表,不便后续的数据分析,即分库分表合并同步的场景。针对这种场景,阿里云 Flink CDC 提供了分库分表合并同步个性,通过在 CTAS 语法反对源库和源表的正则表达式,源数据库的分表能够高效地合并同步到上游 Hologres 数仓中。
Flink SQL> USE CATALOG holo;
Flink SQL> CREATE TABLE order AS TABLE mysql.`order_db.*`.`order_.*`;
述 CTAS 语句中的源库名 order_db. 是个正则表达式,能够匹配以后 MySQL 实例下的 order_db01,order_db02 和 order_db03 三个库,源表名 order 也是个正则表达式,能够匹配三个库下所有以 order 打头的表。
针对分库分表同步场景,用户只须要提供分库分表的正则表达式就能够将这多张分库分表合并同步到上游 Hologres 数仓的 ordder 表中。与其余 CDAS 语句一样,分库分表同步场景默认提供表构造变更主动同步个性,上游 Hologres 表的 schema 为所有分表合并后的最宽 schema。分库分表同步时每行记录所属的库名和表名会作为额定的两个字段主动写入到 user 表中,库名 (上图中 db 列)、表名(上图中 tbl 列) 和原主键(上图中 id 列) 会一起作为上游 Hologres user 表的联结主键,保障 Hologres user 表上主键的唯一性。
Hologres 外围能力
阿里云 Hologres 是自研的一站式实时数据仓库引擎,反对海量数据实时写入、实时更新、实时剖析,反对规范 SQL(兼容 PostgreSQL 协定),提供 PB 级数据多维分析(OLAP)与即席剖析以及高并发低提早的在线数据服务(Serving),与阿里云 Flink、MaxCompute、DataWorks 等深度交融,为企业提供离在线一体化全栈数仓解决方案。
2.1 高性能实时写入与更新
数据写入的时效性是实时数仓的重要能力之一。对于 BI 类等提早不敏感的业务查问,如果写入时延几秒甚至几分钟可能是能够承受的。而对于很多生产零碎,如实时风控、实时大屏等场景,要求数据写入即可见。如果写入呈现提早,就会查问不到最新的数据,重大影响线上业务决策。在实时数仓整个数据处理链路中,Hologres 作为一站式实时数据仓库引擎,提供海量数据高性能的实时写入,数据写入即可查问,无提早。
同时在数仓场景上,数据起源简单,会波及到十分多的数据更新、修改的场景,Hologres 能够通过主键(Primary Key, PK)提供高性能的 Upsert 能力,整个写入和更新过程确保 Exactly Once,满足对对数据的合并、更新等需要。
下图为 Hologres 128C 实例下,10 个并发实时写入 20 列的列存表的测试后果。其中竖轴示意每秒写入记录数,横轴为 4 个写入场景:
- Append Only:写入表无主键,写入能力 230 万 + 的 RPS。
- INSERT:写入表有主键,如果主键抵触就抛弃新行,写入能力 200 万 RPS。
- UPDATE-1:写入表有主键,表中原始数据量为 2 亿,依照主键 Upsert,写入能力 80 万的 RPS。
- UPDATE-2:写入表有主键,表中数据量为 20 亿,依照主键做 Upsert,写入能力 70 万的 RPS。
2.2 实时 OLAP 剖析
Hologres 采纳可扩大的 MPP 全并行计算,反对行存、列存、行列共存等多种存储模式,同时反对多种索引类型。通过分布式解决 SQL 以及向量化的算子,可能将 CPU 资源施展到极致,从而反对海量数据亚秒级剖析,无需预计算,就能反对实时多维分析、即席剖析等多种实时 OLAP 剖析的场景,再间接无缝对接下层利用 / 服务,满足所见即所得的剖析体验。
下图为 Hologres 128C 实例下,TPCH 100G 规范数据集下的测试后果,横轴示意 query,纵轴是响应工夫:
2.3 高性能在线服务
随着实时数仓的广泛应用,越来越多的企业把实时数仓作为在线服务零碎提供在线查问。Hologres 作为 HSAP(Hybrid Serving and Analytics Processing, 服务与剖析一体化)的最佳落地实际,除了具备解决剖析型 Query 的能力外,还具备非常弱小的在线服务 Serving 能力 (高 QPS 点查),例如 KV 点查与向量检索。在 KV 点查场景中,Holgres 通过 SQL 接口能够反对 百万级的 QPS 吞吐 与极低的延时。通过 Hologres 可能做到一套零碎、一份数据反对同时 OLAP 剖析和在线服务两种场景,简化数据架构。
下图为 Hologres 128C 实例下,CPU 耗费 25% 的点查测试性能:
2.4 读写拆散高可用
实时数据仓库 Hologres 提供高 QPS 低提早的写入能力,反对在线服务的查问场景,还反对简单的多维分析 OLAP 查问。当不同类型,不同简单的工作申请到 Hologres 实例上时,Hologres 不仅须要确保工作的失常运行,还要确保零碎的稳定性。以后 Hologres 反对通过共享存储的一主多从子实例的高可用架构,实现了残缺的读写拆散性能,保障 不同业务场景的 SLA。
- 读写拆散:实现了残缺的读写拆散性能,保障不同业务场景的 SLA,在高吞吐的数据写入和简单的 ETL 作业、OLAP 查问、AdHoc 查问、在线服务等场景中,零碎负载物理上齐全隔离,不会因写入工作产生了查问工作的抖动。
- 多类型负载资源隔离:一个主实例能够配置四个只读实例,实例之间能够依据业务状况配置不同规格,零碎负载物理上齐全隔离,防止相互影响而带来抖动。
- 实例间数据毫秒级异步同步提早:P99 5ms 内。
2.5 Binlog 订阅
相似于传统数据库 MySQL 中的 Binlog 概念,Binlog 用来记录数据库中表数据的批改记录,比方 Insert/Delete/Update 的操作。在 Hologres 中,表的 Binlog 是一种强 Schema 格局的数据,Binlog 记录的序列号(BigInt),在单 shard 内枯燥递增,相似于 Kafka 中的 Offset 概念。通过阿里云 Flink 生产 Hologres Binlog,能够实现数仓分层间的全链路实时开发,在分层治理的前提下,缩短数据加工端到端提早,同时晋升实时数仓分层的开发效率。
阿里云 Flink x Hologres 一站式企业级实时数仓解决方案
3.1 实时数仓 ETL
ETL(Extract-Transform-Load)是比拟传统的数据仓库建设办法,业务库的数据 Binlog 通过阿里云 Flink 的 ETL 解决之后,数据写入到实时数仓 Hologres 中,而后进行各类数据查问剖析。ETL 的办法外围是须要在数仓中具备欠缺的数仓模型分层,通常依照 ODS(Operational Data Source)> DWD(Data Warehouse Detail)> DWS(Data Warehouse Summary)> ADS(Application Data Service)分层,整个数仓链路比较完善。
在这个链路中,须要将数据源比方 MySQL 的 Binlog 数据通过阿里云 Flink CDC 同步到音讯队列 Kafka,再通过阿里云 Flink 将 ODS 的数据进行过滤,荡涤,逻辑转化等操作,造成对不同的业务主题模型的 DWD 数据明细层,同时将数据发送到 Kafka 集群,之后再通过阿里云 Flink 将 DWD 的数据进行轻度的汇总操作,造成业务上更加不便查问的 DWS 轻度汇总层数据,再将数据写入 Kafka 集群。最初再面向业务具体的应用层的需要,在 DWS 层根底上通过阿里云 Flink 实时处理造成 ADS 数据应用层,写入实时数仓 Hologres 进行存储和剖析,反对业务各种不同类型的报表,画像等业务场景。
实时数仓 ETL 的解决长处是数仓各种档次比拟齐备,职责清晰,然而毛病是 Flink 联合 Kafka 集群保护简单,解决链路比拟长,历史数据修改简单,ADS 应用层的数据实时性会弱,其次数据在各个 Kafka 中不便于查问,不便于检查数据品质,也不便于实现 schema 的动态变化。
3.2 实时数仓 ELT
随着业务对数据的时效性要求越来越高时,相较于 ETL 简单繁冗的解决链路,业务须要更疾速的将数据实时入仓,因而 ELT 变成了比拟风行的解决办法。ELT 是英文 Extract-Load-Transform 的缩写,咱们可将 ELT 了解为一个数据迁徙集成的过程。在这个过程中,咱们能够对数据源关系型数据库比方 MySQL、PostgresSQL 和非关系型数据库比方 HBase、Cassandra 等业务库的 Binlog,音讯队列比方 Datahub、Kafka 中的埋点采集日志等数据,通过阿里云 Flink 实时抽取,而后加载到 Hologres 中进行相干的 OLAP 剖析和在线服务。
在这个链路中,阿里云 Flink 负责数据的实时入仓以及数据的荡涤关联,荡涤后的数据实时入 Hologres,由 Hologres 间接存储明细数据。在 Hologres 中能够简化分层,以明细层为主,按需搭配其余汇总层,通过 Hologres 弱小的数据处理能力间接对接报表、利用等下层查问服务。下层的剖析 SQL 无奈固化,通常在 ADS 层以逻辑视图(View)封装 SQL 逻辑,下层利用间接查问封装好的 View,实现即席查问。
实时数仓中采取 ELT 的形式进行建设,会给数据和业务带来比拟大的收益,具体如下:
- 灵活性 :将原始的业务数据间接入仓,造成 ODS 层的数据,在数仓中通过 View 能够灵便地对数据进行转换(Transformation) 的解决,View 能够随时依据业务进行调整。
- 成本低:数据仓库的架构比拟清晰,链路比拟短,运维老本比拟低。
- 指标修改简略:下层都是 View 逻辑封装,只须要更新底表的数据即可,无需逐层修改数据。
然而该计划也存在一些毛病,当 View 的逻辑较为简单,数据量较多时,查问性能较低。因而比拟适宜于数据来源于数据库和埋点零碎,对 QPS 要求不高,对灵活性要求比拟高,且计算资源较为短缺的场景。
3.3 实时数仓分层(Streaming Warehouse 计划)
依照传统数仓的开发方法论,采纳 ODS>DWD>DWS>ADS 开发的办法,通过阿里云 Flink 和 Hologres Binlog 的组合关系,反对层与层之间有状态的全链路事件实时驱动。在该计划中,数据通过阿里云 Flink CDC 实时入仓至 Hologres,再通过阿里云 Flink 订阅 Hologres Binlog,实现数据在不同档次之间的间断加工,最初写入 Hologres 对接利用查问。
通过这个计划,Hologres 能够达到像 Kafka、Datahub 等音讯队列等同的能力,减少数据复用的能力,一个 Table 的数据既能够提供给上游阿里云 Flink 工作生产,还能够对接上游 OLAP/ 在线服务查问,不仅节俭了老本,还简化数仓架构,同时也让数仓中的每一个档次都能够实时构建、实时查问,晋升数据的流转效率。
3.4 流批一体数仓
在实时数仓中,流计算工作和批处理工作都是分两条工作流进行开发的,也即是 Kappa 架构模式。在这套数仓架构中,会存在人力老本过高,数据链路冗余,数据口径不统一,开发效率低下的一些问题。为了解决这些问题,阿里云 Flink+Hologres 提供了流批一体的能力。在该场景中,将输出层对立变成 Hologres,通过一套业务逻辑代码达到流和批处理的能力,其中 Flink SQL 的 Stream 工作生产 Hologres Binlog 提供流式解决,Flink SQL 的 Batch 工作读取 Hologres 表的原始数据达到批处理能力,通过 Flink 对立的计算解决之后,对立写入存储至 Hologres。
阿里云 Flink 联合 Hologres 的流批一体技术,对立了数据输出层、实时离线计算层和数据分析存储层,极大的晋升了数据开发的效率,保障了数据的品质。
典型利用场景
阿里云 Flink 与 Hologres 深度集成,助力企业疾速构建一站式实时数仓:
- 可通过阿里云 Flink 实时写入 Hologres,高性能写入与更新,数据写入即可见,无提早,满足实时数仓高性能低提早写入需要;
- 可通过阿里云 Flink 的全量读取、Binlog 读取、CDC 读取、全增量一体化等多种形式,读取 Hologres 源表数据,无需额定组件,对立计算和存储,减速数据流转效率;
- 可通过阿里云 Flink 读取 Hologres 维表,助力高性能维表关联、数据打宽等多种利用场景;
- 阿里云 Flink 与 Hologres 元数据买通,通过 Hologres Catalog,实现元数据主动发现,极大晋升作业开发效率和正确性。
通过阿里云 Flink 与 Hologres 的实时数仓规范解决方案,可能撑持多种实时数仓利用场景,如实时举荐、实时风控等,满足企业的实时剖析需要。上面咱们将会介绍阿里云 Flink + Hologres 的典型利用场景,助力业务更加高效的搭建实时数仓。
4.1 海量数据实时入仓
实时数仓搭建的第一步便是海量数据的实时入仓,基于阿里云 Flink CDC 能够简略高效地将海量数据同步到实时数仓中,并能将增量数据以及表构造变更实时同步到数仓中。而整个流程只需在阿里云 Flink 上定义一条 CREATE DATABASE AS DATABASE 的 SQL 即可(具体步骤可参考 实时入仓疾速入门[4])。经测试,对于 MySQL 中的 TPC-DS 1T 数据集,应用阿里云 Flink 64 并发,只需 5 小时便能齐全同步到 Hologres,TPS 约 30 万条 / 秒。在增量 Binlog 同步阶段,应用阿里云 Flink 单并发,同步性能达到 10 万条 / 秒。
4.2 双流 Join
数据实时入仓造成了 ODS 层的数据后,通常须要将事实数据与维度数据利用 Flink 多流 Join 的能力实时地打平成宽表,联合 Hologres 宽表极佳的多维分析性能,助力下层业务查问提速。阿里云 Flink 反对以全增量一体化的模式读取 Hologres 表,即先读取全量数据再平滑切换到读取 CDC 数据,整个过程保证数据的不重不丢。因而基于阿里云 Flink 能够十分不便地实时加工和打宽 Hologres 的 ODS 层数据,实现 DWD 层的宽表模型构建。
4.3 宽表 Merge
数据仓库中咱们通常须要关怀的就是建模,数据模型通常分为四种:宽表模型、星型模型、雪花模型、星座模型(Hologres 均反对),在这里咱们重点要提到的是宽表模型的建设。宽表模型通常是指将业务主体相干的指标、维表、属性关联在一起的模型表,也能够泛指将多个事实表和多个维度表相关联到一起造成的宽表。
宽表建设通常的做法就是通过阿里云 Flink 的双流 Join 来实现,包含 Regular Join,Interval Join,Temporal Join。对于主键关联的场景(即 Join 条件别离是两条流的主键),咱们能够将 Join 的工作下沉到 Hologres 去做,通过 Hologres 的部分更新性能来实现宽表 Merge,从而省去了 Flink Join 的状态保护老本。比方广告场景中,一个 Flink 工作解决广告曝光数据流,统计每个产品的曝光量,以产品 ID 作为主键,更新到产品指标宽表中。同时,另一个 Flink 工作解决广告点击数据流,统计每个产品的点击量,也以产品 ID 作为主键,更新到产品指标宽表中。整个过程不须要进行双流 Join,最终 Hologres 会本人实现整行数据的组装。基于失去的产品指标宽表,用户能够不便地在 Hologres 进行广告营销的剖析,例如计算产品的 CTR= 点击数 / 曝光数。下图和代码示例展现了如何从双流 Join 改为宽表 Merge。
CREATE TABLE ods_ad_click (
product_id INT,
click_id BIGINT,
click_time TIMESTAMP
) WITH ('connector'='datahub', 'topic'='..');
CREATE TABLE ods_ad_impressions (
product_id INT,
imp_id BIGINT,
imp_time TIMESTAMP
) WITH ('connector'='datahub', 'topic'='..');
CREATE TABLE dws_ad_product (
product_id INT,
click_cnt BIGINT,
imp_cnt BIGINT,
PRIMARY KEY (product_id) NOT ENFORCED
) WITH ('connector'='hologres','insertOrUpdate'='true');
INSERT INTO dws_ad_product (product_id, click_cnt)
SELECT product_id, COUNT(click_id) as click_cnt
FROM ods_ad_click
GROUP BY product_id;
INSERT INTO dws_ad_product (product_id, imp_cnt)
SELECT product_id, COUNT(imp_id) AS imp_cnt
FROM ods_ad_impressions
GROUP BY product_id;
应用 Hologres 宽表的 Merge 能力,不仅能够晋升流作业的开发效率,还能缩小流作业所须要的资源耗费,也可能更容易的保护各个流作业,让作业之间不会相互影响。但须要留神的是,宽表 Merge 仅限于应用在主键关联的场景,并不适用于数仓中常见的星型模型和雪花模型,所以在大部分场景仍需应用 Flink 的双流 Join 来实现宽表建模。
4.4 实时维表 Lookup
在实时数仓中,在构建 DWD 层的数据过程中,个别都是通过阿里云 Flink 来读取音讯队列比方 Datahub 上的 ODS 数据,同时须要关联维表来造成 DWD 层。在阿里云 Flink 的计算过程中,须要高效的读取维表的能力,Hologres 能够通过高 QPS 低提早的点查能力来满足实现这类场景需要。比方咱们须要通过 ODS 的数据去 Join 维表造成 DWD 层的时候,就能够利用 Hologres 提供的点查能力,在该模式中,通常应用行存表的主键点查模式进步维表的 Lookup 效率。具体的实现相似如下:
典型用户案例
依靠阿里云 Flink+Hologres 解决方案,企业能够疾速构建一站式实时数仓,助力实时举荐、实时风控、实时大屏等多种业务场景,实现对数据的疾速解决,极速摸索查问。目前该计划已在阿里巴巴外部、泛滥云上企业生产落地,成为实时数仓的最佳解决方案之一。
以某出名寰球 TOP20 游戏公司业务为例,其通过阿里云 Flink+Hologres 实时数仓计划,替换开源 Flink+Presto+HBase+ClickHouse 架构,简化数据处理链路、对立数仓架构、对立存储、查问性能晋升 100% 甚至更多,完满撑持数据分析、广告投放、实时决策等多个场景,助力业务快速增长。
5.1 业务艰难:ETL 链路简单、OLAP 查问慢
客户原数仓架构应用全套开源组件,架构图如下。其中开源 Flink 做 ETL 解决,解决后写入 ClickHouse、Starocks 等 OLAP 引擎。
这套架构遇见的次要痛点有:
1、ETL 链路简单
- 为了解决数据实时 ETL,客户通过 Flink CDC + Hudi 做流批一体。但因为上游业务数据常常变更表构造,而开源 Flink CDC 不足 Schema Evolution 的能力,每次表构造变更都须要工作重新启动,操作十分麻烦,节约大量开发工夫。
- Hudi 的查问性能不满足业务需要,还须要再加一个 Presto 做减速查问,造成链路冗余。
2、OLAP 架构冗余,查问慢
客户次要是靠买量发行作为游戏推广的重要伎俩,为了解决广告归因的实时决策场景对查问减速的须要,于是部署了开源 Presto、ClickHouse、HBase 等多套集群搭建混合 OLAP 平台。带来的问题有:
- 平台须要保护多套集群,导致运维变得非常复杂。
- 开发须要在各种 SQL 中切换,为开发团队带来了许多困扰。
- 因为 ClickHouse 不足主键,在归因剖析时须要应用 Last Click 模型,带来了大量的额定工作。
- 同时 OLAP 引擎的查问性能没有方法很好的满足业务需要,没方法依据数据实时决策。
- 数据须要在多个 OLAP 零碎中存储,造成存储冗余,导致老本压力剧增。
基于下面的痛点,客户开始从新做技术选型,并应用阿里云 Flink+Hologres 来替换现有的开源数仓架构。
5.2 架构降级:阿里云 Flink+Hologres 对立数据存储与服务
通过阿里云 Flink+Hologres 替换后的数据链路如下:
- 数据源数据通过 Flink CDC 能力写入 Kafka 做前置荡涤,荡涤后通过阿里云 Flink 进行 ETL 解决。
- 阿里云 Flink 通过 ETL 后的数据实时写入 Hologres,通过 Hologres 替换了 Kafka 作为实时数仓的两头数据层,对立了流批存储。
- 在 Hologres 中依据 ODS > DWD > DWS 层汇总加工。在 ODS 层,阿里云 Flink 订阅 Hologres Binlog,计算后写入 Hologres DWD 层,DWD 层在 Hologres 中汇总成 DWS 层,最初 DWS 对接下层报表和数据服务等业务。
- 为了存储的对立,也将原离线 Hive 数据替换成阿里云 MaxCompute,以 MaxCompute 为离线次要链路。因 Hologres 与 MaxCompute 的高效互通能力,Hologres 通过表面离线减速查问 MaxCompute,并将历史数据定期归档至 MaxCompute。
5.3 业务收益:架构对立,性能晋升 100%
通过架构降级后,客户的显著业务收益如下:
- 依靠阿里云 Flink+Hologres,数据能够实时写入 Hologres,写入即可见,并且 Hologres 有主键,可能撑持高性能的写入更新能力,百万级更新毫秒级提早。
- 阿里云 Flink 提供 Schema Evolution 的能力,主动感知上游表构造变更并同步 Hologres,革新后的实时 ETL 链路通过订阅 Hologres Binlog 日志来实现,升高链路保护老本。
- 通过 Hologres 对立了数据查问进口,通过客户实测,Hologres 能够达到毫秒级提早,相比开源 ClickHouse 性能晋升 100% 甚至更多,JOIN 查问性能快 10 倍。
- 降级后数仓架构变得更加灵便简洁,对立了存储,只须要一套零碎就能满足业务需要,升高运维压力和运维老本。