摘要:本文整顿自阿里云资深技术专家,阿里云 Hologres 负责人姜伟华(果贝),在 FFA 实时湖仓专场的分享。本篇内容次要分为四个局部:
- 实时数仓分层的技术需要
- 阿里云一站式实时数仓 Hologres 介绍
- Flink x Hologres:天作之合
- 基于 Flink Catalog 的 Streaming Warehouse 实际
点击查看直播回放 & 演讲 PPT
一、实时数仓分层的技术需要
首先,咱们讲一讲分层技术。大数据当初越来越考究实时化,在各种场景下都须要实时。因而大数据须要构建实时数仓,但如何构建实时数仓呢?
离线数仓的构建,有十分规范的方法论体系,首先通过分层 ODS->DWD->DWS->ADS,而后通过定时调度去实现分层和结构。相比离线数仓,实时数仓没有明确的方法论体系。因而在实践中,有各种各样的办法,但没有一个办法是万能。最近行业内提出了 Streaming Warehouse。Streaming Warehouse 的实质是分层之间可能做到实时数据的流动,从而解决实时数仓分层的问题。
上面,咱们来理解下实时数仓的支流分层计划。
第一个计划,数据通过 Flink 荡涤后,写到 Kafka 造成 ODS 层。再从 Kafka 生产,通过加工造成 DWD 层。而后 Flink 加工成 DWS 层,最初通过加工造成 ADS 层的数据写到 KV 引擎,供给用生产。
因为 Kafka 数据进行剖析和探查很麻烦。所以,咱们会同步一份 Kafka 数据到实时数仓,通过实时数仓进行剖析和探查。
这个体系的劣势是档次明确,分工明确。但它的劣势是须要有大量的同步工作;数据资源耗费很大;数据有很多冗余;解决链路较简单,须要好多组件。除此之外,在这个体系下构建的实时数仓分层,尤其是 Kafka 分层,它的复用性十分差。
第二个计划,这个办法不须要分层,整体架构只须要一层。咱们把数据加工荡涤后,写到实时数仓里,造成 DWD 层。所有的查问都是查问 DWD 层的明细数据。所以该办法也被称之为 ELT,把明细数据写进去(EL),变换(T)在查问时进行。
这个计划的益处在于,没有 ETL,只有一层;数据订正很不便。但它的弊病有两个方面:
- 在查问性能方面,因为是明细数据查问,所以在某些场景下不能满足 QPS 或提早的要求。
- 因为没有分层,所以数据复用很艰难,很难兼顾各方面的诉求。
第三个计划,既然实时流式无奈实现数据的实时数仓分层,咱们能够将数据实时写入实时数仓的 DWD 层。DWS 层、ADS 层用离线的高频调度办法,实现分钟级的调度。从而借用离线数仓,进行分层结构。
这个计划的益处在于,它能够复用很多离线教训,计划成本低且成熟。但这个计划存在如下毛病:
- 提早大。每一层的提早都跟调度相干,随着档次越多,调度提早越大。实时数仓也变成了准实时数仓。
- 不能齐全复用离线计划。离线调度个别是小时级或天级,咱们能够应用全量计算。但在分钟级调度时,必须做增量计算,否则无奈及时调度。
第四个计划,Flink 实时加工后,将数据写到实时数仓造成 DWD 层。但 DWS 层或 ADS 层的结构,依赖于实时数仓的实时物化视图的能力。当初实时数仓都开始提供物化视图的能力,这种能力实质上是提供了一些简略的聚合类物化视图。
如果用户的物化视图需要较简略,能够利用实时数仓里的实时物化视图能力,将 DWS 层到 ADS 层的构建自动化。从而让物化视图的查问保障较高的 QPS。这个计划最大的毛病在于,实时物化视图还不成熟,能力无限。
二、阿里云一站式实时数仓 Hologres 介绍
接下来,介绍一下阿里云一站式实时数仓 Hologres 产品。Hologres 是阿里云自研的一站式实时数仓,它同时蕴含三种能力:
- 它反对传统的实时数仓和 OLAP。
- 它反对 Serving(KV) 场景,有十分高的 QPS 和很低的提早。
- 它反对数据湖和阿里云离线数仓 MaxCompute 减速的能力。
首先,在实时数仓方面。大家能够把 Hologres 当做一个常见的实时数仓。它的特点在于写入侧反对百万 RPS 实时写入,写入即可查,没有提早。咱们反对高性能的实时整行更新和部分更新。其中。整行更新是把整行替换掉,部分更新能够更新一行中的部分字段,二者都是实时更新。
在查问侧,一方面对于实时看板类的需要,反对高 QPS。比方几百或上千 QPS 的简略查问。另一方面,咱们也反对简单计算。近期,Hologres 拿到了 TPC-H 30TB 的性能世界第一的 TPC 官网认证问题。
其次,在数据服务方面。Hologres 岂但反对百万 QPS KV 点查,而且反对阿里云达摩院的 Proxima 向量检索引擎,能够反对十分高的向量检索能力。这些能力在 Hologres 中是全 SQL 表白,对用户应用十分敌对。
为了同时兼顾数据服务和实时数仓的需要,咱们反对行列共存的数据格式。行列共存是指,一张表的数据既有一份行存,又有一份列存,并且零碎保障这两份数据是强统一的。对于 OLAP 剖析,优化器会主动抉择列存。对于线上服务,它会主动抉择行存。
因为 Hologres 同时反对 OLAP 剖析和线上服务,其中线上服务要求十分高的稳定性和 SLA。所以咱们要保障 OLAP 剖析和线上服务时,不会发生冲突。
因而,咱们反对读写的拆散、OLAP 剖析和数据服务的强隔离。这里的强隔离不同于一般实时数仓的弱隔离。弱隔离个别通过资源组的形式来实现,Hologres 间接做了强隔离,并没有通过资源组。
最初,在湖仓数据交互式剖析方面。对于阿里云 MaxCompute 离线数仓里的数据,数据湖的数据都能够做秒级的交互式剖析。且不须要做任何的数据搬迁。这种表咱们称为“表面”。用户能够将表面和内表进行关联剖析。
因为 Hologres 的定位是一站式的企业级实时数仓,所以除了上述能力,咱们还有很多其余能力。包含数据的治理、老本治理、数据血统、数据脱敏、数据加密、IP 白名单、数据的备份和复原等等。
三、Flink x Hologres:天作之合
Flink 和 Hologres 有十分深度的整合关系。最后 Hologres 团队和 Flink 团队是同一个团队,所以 Hologres 在设计之初,着重思考如何反对 Flink。那么 Hologres 和 Flink 有哪些深度整合的能力?
第一,Hologres 能够作为 Flink 的维表。因为 Hologres 有很强的点查能力,所以它能够作为 Flink 的维表应用。在实时计算的场景下,Flink 对维表的需要很强。咱们反对百万级至千万级的 RPS 查问,且维表可实时更新。因而,很多用户会把 Hologres 用作 Flink 的实时维表(比方说实时特色存储)。
第二,Hologres 能够作为 Flink 的后果表。Hologres 有十分强的实时写入和整行实时更新的能力,跟 Flink 十分匹配。因为 Flink 的输入须要弱小的 Update,后果表须要很强的笼罩能力、以及实时更新能力。
与此同时,Hologres 还有很强的部分更新能力。部分更新能力在很多场景下,能够代替 Flink 的多流 Join,为客户节省成本。
第三,Hologres 能够作为 Flink 的源表。Hologres 提供了 Binlog,一张表的任何变动,比方 insert、update、delete 等等,都会产生 Binlog 事件。Flink 能够订阅 Binlog,进行驱动计算。因为 Flink 反对 Hologres 的整表读取,二者联合形成了 Flink 全增量一体化的读取能力。并且,咱们对接 Flink CDC,它能够驱动 CDC 的计算。
第四,咱们在 Flink 中实现了 Hologres 的 Catalog。用户不须要在 Flink 里建 Hologres 的表面。通过 Catalog 的任何操作,都会间接实时反映到 Hologres 里。通过这种办法,Flink+Hologres 就具备了整库同步、Schema Evolution 的能力。
由此可见,咱们在维表、后果表、源表、Catalog 四个方面,对 Flink 和 Hologres 做了深度整合。
接下来,介绍一下 Flink 和 Hologres,如何构建 Streaming Warehouse?相比常见的 Flink+Kafka 的分层计划,Flink+Hologres 能够齐全将其替换。
首先,将 Flink 写到 Hologres 里,造成 ODS 层。Flink 订阅 ODS 层的 Binlog 进行加工,将 Flink 从 DWD 层再次写入 Hologres 里。
而后,再订阅 DWD 层的 Binlog,通过计算造成 DWS 层,将其再次写入 Hologres 里。最初,由 Hologres 对外提供利用查问。
该计划相比 Kafka 有如下长处:
- 第一,解决了传统中间层 Kafka 数据不易查、不易更新、不易修改的问题。Hologres 的每一层都可查、可更新、可修改。
- 第二,Hologres 的每一层都能够独自对外提供服务。因为每一层的数据都是可查的,所以数据的复用会更好,真正实现数仓分层复用的指标。
- 第三,Hologres 反对数据复用,模型对立,架构简化。目前,该计划曾经有很多客户应用。通过 Flink+Hologres,实现实时数仓分层。
下面讲的 Flink+Hologres 的 Streaming Warehouse 计划,其强依赖于以下三个 Hologres 外围能力:
第一个能力是 Binlog。因为实时数仓个别没有 Binlog,但 Hologres 提供了 Binlog 能力,用来驱动 Flink 做实时计算,正因为有了 binlog,Hologres 能力作为流式计算的上游。
第二个能力是行列共存。一张表既有行存数据,又有列存数据。这两份数据是强统一的。行列共存的个性让中间层的每张表,岂但可能给 Flink 应用,而且能够给其余利用(比方说 OLAP、或者线上服务)应用。
第三个能力是资源强隔离。实时数仓个别是弱隔离或软隔离,通过资源组、资源队列的办法实现资源隔离。如果 Flink 的资源耗费很大,可能影响中间层的点查性能。但在强隔离的状况下,Flink 对 Binlog 的数据拉取,不会影响线上服务。
通过 Binlog、行列共存、资源强隔离的三个特点,不仅能让 Flink+Hologres 造成 Streaming Warehouse,并且可能使两头的每层数据复用,被其余利用或线上服务应用。
接下来,讲一讲基于 Flink+Hologres 的多流合并。因为 Hologres 有特地弱小的部分更新能力,所以咱们能够简化 Flink 的多流 Join。
比方在风控场景下,咱们须要基于用户 ID 构建用户的多侧面画像。用户画像来自很多数据源,比方客户的浏览行为、成交行为、履约行为等等。把数据源的数据依照用户 ID,把每个用户放到一行里,造成不同的字段,造成用户的残缺画像。
传统的形式须要用 Flink 多流 Join 实现,Flink 把上游的多个数据源关联到一起。Join 后写到 Kafka 里,而后驱动上游的 Flink,加工这行残缺的数据。
多流 Join 十分耗资源。所以在 Flink+Hologres 场景下,Hologres 能够利用部分更新能力,把一张表定为定义成 Hologres 的行存表或行列共存表。此时,整个计划就简化成上游每个数据源,同步数据到 Hologres 表的若干个字段里,若干个工作同时写入这张表,而后利用 Hologres 的部分更新能力,把数据汇总在一起。
如果关上这张表的 Binlog,上游任何数据源的变动都会更新这张表,使这张表的 Binlog 中生成行数据的最新状态,而后驱动上游的 Flink 持续计算,从而完满匹配常见的风控场景。这种用法下,资源耗费、运维都失去了极大的简化。
四、基于 Flink Catalog 的 Streaming Warehouse 实际
尽管上述计划曾经十分成熟,但惟一的毛病在于,用户须要在两个零碎之间切换,过程比拟繁琐。为了让用户操作更简略,咱们基于 Flink Catalog 提供了更加简略的应用体验。
上面咱们来看看怎么样基于 Flink Catalog 去构建基于 Flink+Hologres 的 Streaming Warehouse。咱们会发现,有了 Flink Catalog 后,整个应用体验会很简略,并能充分发挥 Flink 和 Hologres 两个产品的弱小能力。
上图是一个典型的 Flink+Hologres 实时 ETL 链路;
- ODS 层、DWD 层、ODS 层的数据都存在 Hologres 中。
- 链路中所有的数据加工都是通过 Flink SQL 实现。在整个 ETL 链路中,用户不须要任何 Hologres SQL,间接写 Flink SQL 即可。
- Flink 用户能够通过 Flink SQL 对每层中的 Hologres 数据进行数据探查(流模式和批模式都能够)。比方说,当咱们发现 DWS 层的数据后果呈现问题,须要查看哪层的后果有问题或逻辑有谬误。此时,咱们能够复用原来的 Flink SQL 来进行探查、定位或者数据从新生产。
- Hologres 中的每层数据都能够对外提供查问和服务(通过 Hologres SQL)。
接下来,以某个电商场景为例,演示一下基于 Flink Catalog 的 Streaming Warehouse。如上图所示,有一个 MySQL 数据库作为订单库,外面有订单表 orders、订单领取表 orders_pay、以及产品品类表 product_catalog。
- 第一步,咱们通过 Flink 的实时数仓,把数据实时同步到 Hologres 里,造成 ODS 层。
- 第二步,加工 DWD 层。将 DWD 层的数据写到 Hologres 里。在这个过程中,咱们须要把订单表和订单领取表,合并成一张表,实现多路合并。与此同时,咱们心愿 orders 表关联商品品类表 product_catalog。
- 第三步,驱动上游计算,构建 DWS 层。以用户维度和商店维度,收集统计数据。比方用户每天的订单金额和商店每天的订单金额,从而造成一条残缺的链路。
- 第四步,将 DWS 层的表举荐给零碎应用。作为用户和商店的特色,用做举荐用处。
- 第五步,DWD 层的表可能间接用来做实时统计分析、统计产品、实时大屏、实时报表。
上图中的绿色链路,全副应用 Flink SQL 实现。橙色链路对外提供服务,由 Hologres SQL 实现。
接下来,讲一讲每个步骤是如何运行的。
第一步,在 Flink 实时数仓,造成 ODS 层。首先,创立一个 Hologres 的 Catalog。MySQL 中存储订单、领取以及商品信息 3 张表,通过 Flink Catalog 性能,将 MySQL 整库的数据实时同步至 Hologres,造成 ODS。相干代码如上图所示。咱们能够看到,Mysql 整库同步到 Hologres,通过 Flink SQL 来表白是非常简单的。
第二步,DWD 实时构建。数据实时写入 ODS 层后,Flink 读取 Hologres Binlog,并用多流合并、维表关联将订单、交易、商品 3 个表打成一个大宽表,实时写入至 Hologres 的订单汇总表中,造成 DWD 层。
左图中的 SQL 是 DWD 层表的建表语句。这张指标表蕴含了来自 orders、orders_pay、product_catalog 的字段,关联了相干的用户信息、商户信息、订单信息、商品品类信息等等,造成了一张宽表。
右图中的 SQL 是真正的计算逻辑。这里蕴含两个 INSERT 语句。
- 第一个 INSERT 语句是从 orders 表实时打宽后写入。这里用到了 Hologres 的维表关联能力。实时打宽后,写入指标表的局部字段。
- 第二个 INSERT 语句是从 orders_pay 表实时同步到同一张指标表,更新另外一些字段。
这两个 INSERT 语句最大的关联在于,它们写的是同一张表,会主动利用指标表的主键 ID 进行关联。每个 INSERT 都是做了指标表的部分更新,两者的合力后果是实时更新的指标宽表。
在上述过程中,它用了多种 Hologres 能力。比方驱动 Flink 做构建 DWD 层表;维表关联能力;部分更新能力等等。
第三步,DWS 层的实时聚合。在 DWD 的根底上,通过 Flink 读取 Hologres DWD 的 Binlog 数据,进行实时指标聚合计算,比方依照用户维度聚合,依照商户维度聚合等,而后实时写入 Hologres,造成 DWS 层。
上图中,右边是 DDL 语句,左边是聚合语句。通过简略的三步后,Flink SQL 构建了残缺的 Streaming Warehouse 分层体系。
第四步,构建利用。基于 DWS 层,对外提供服务。数据的分层和加工实现后,业务就能够通过 Hologres 查问数据并利用。在这个例子里,举荐零碎要求十分高的点查性能,所以要求百万级的 QPS 查看能力。Hologres 的行存表或者行列共存表齐全能够满足。
这个计划和传统的实时数仓最大的差异是:传统的实时数仓只有最初一层的数据,可对外提供服务。而在 Hologres 里,DWD 等中间层数据也能够对外提供服务,进行实时报表统计。用户能够在中间层进行查问操作,对接各种实时利用、实时大屏。比方间接查 DWD 层的数据,典型的如依据用户 ID 返回举荐商品(KV 场景),以及实时报表查看订单量和退单量(OLAP)。
第五步,问题排查:Flink 数据探查。如果某个业务指标出现异常,Flink 能够间接探查每层表的数据来疾速定位。比方用 Flink 探查 Hologres DWD 层的 orders 表。Hologres 反对 Flink 的流模式和批模式对数据的探查。
因为流模式是 Flink 的默认模式,因而咱们不须要设置执行模式。它能够间接记录数据变动,从而十分不便的查看数据异样。流模式能够探查获取一段时间范畴内的数据及其变动状况。
与此同时,批模式探查是获取以后时刻的最新数据。Hologres 也反对 Flink 批模式的数据探查。批模式和流模式的区别在于,流模式关注的是变动,批模式关注的是表中的最新状态。
综上所述,当 Hologres 跟 Flink 深度整合,就能够构建弱小的 Streaming Warehouse。全链路都能够用 SQL 示意,并且只须要用到 Flink 和 Hologres 两个组件,操作十分不便。
实时 ETL 链路、数据分层齐全能够用 Flink SQL 实现。对外查问能够用弱小的 Hologres 计算引擎来做,每层数据可复用、可查,不便构建实时数仓的数据分层和复用体系。
这种体系有着很好的性能。Hologres 有十分强的实时写入、实时更新能力和弱小的 OLAP、点查能力,Flink 有着十分强的实时加工能力。
用户能够基于这个计划,利用 Hologres 弱小的百万 QPS 点查能力和高性能 OLAP 能力构建各种实时利用。
与此同时,咱们有很多企业级能力,让大家的运维更简略,可观测性更好,平安能力更强,从而更加不便的构建企业级的 Streaming Warehouse。
点击查看直播回放 & 演讲 PPT
更多内容
流动举荐
阿里云基于 Apache Flink 构建的企业级产品 - 实时计算 Flink 版现开启流动:
99 元试用 实时计算 Flink 版(包年包月、10CU)即有机会取得 Flink 独家定制卫衣;另包 3 个月及以上还有 85 折优惠!
理解流动详情:https://www.aliyun.com/produc…