由于Flink集成了批计算和流计算,因此可以使用Flink构建流批一体的系统架构,主要包含数据集成的流批一体架构、数仓架构的流批一体架构和数据湖的流批一体。
一、数据集成的流批一体架构
在大数据场景下经常需要数据同步或者数据集成,也就是将数据库中的数据同步到大数据的数仓或者其他存储中。下图中的左边是传统的经典数据集成的模式之一,全量的同步和增量的同步实际上是两套技术,需要定期将全量同步的数据跟增量同步数据做合并,不断的迭代来把数据库的数据同步到数据仓库中。
基于Flink流批一体整个数据集成的架构将不同。因为Flink SQL也支持数据库的CDC语义,所以可以用Flink SQL一键同步数据库的数据到Hive、Click House和TiDB等开源的数据库或开源的KV存储中。在Flink流批一体架构的基础上,Flink CDC也是流批混合的,它可以先读取数据库全量数据同步到数仓中,然后自动切换到增量模式。通过Flink CDC读数据库日志进行增量和全量的同步,Flink内部都可以自动协调好,这是流批一体的价值。
视频讲解如下:
二、数仓架构的流批一体架构
&emsp目前主流数仓架构都是一套典型的离线数仓和一套新的实时数仓,但这两套技术栈是分开的。在离线数仓里,还是习惯用 Hive 或者 Spark;在实时数仓中用 Flink和Kafka。这里就有三个问题需要解决:两套开发流程,成本高;数据链路冗余,两套链路将数据相关的操作做了两遍;数据口径的一致性难以保证,因为它是由两套引擎算出来的。用流批一体架构来解决,以上难题将极大降低,其优点如下:
- 首先,Flink 是一套开发规范,不存在两套开发成本。一个开发团队,一套技术栈,就可以做所有的离线和实时业务统计的问题。
- 第二,数据链路也不存在冗余,计算一次即可,不需要离线再算一遍。
- 第三,数据口径天然一致。无论是离线的流程,还是实时的流程,都是一套引擎、一套 SQL、一套UDF、一套开发人员,所以它天然是一致的,不存在实时和离线数据口径不一致的问题。
数据仓库的流批一体架构如下图所示。
视频讲解如下:
三、数据湖的流批一体
Hive元数据的管理是性能的瓶颈,同时Hive也不支持数据的实时更新。Hive没有无法实现实时或者准实时化的数据处理能力。现在比较新的数据湖架构,可以解决更具扩展性的元数据的问题,而且数据湖的存储支持数据的更新,它是一个流批一体的存储。数据湖存储与Flink结合,就可以将实时离线一体化的数仓架构演变成实时离线一体化的数据湖架构。数据湖的流批一体架构如下图所示。
视频讲解如下: