首页 > 数据库 > 数据库开发技术 > 基于Flink和Doris构建的实时数仓方案实践
传统的离线数仓数据延迟比较大,实时性比较低,不能满足实时指标计算场景,因此构建实时数仓成为当前迫切需求
如果数据的实时性并不是非常重要,那么在建立数据仓库时,通常会优先考虑建立离线数据仓库。

使用doris作为数据存储和计算以及分析查询的引擎
使用Dolphinscheduler作为任务调度
结合海豚调度,能够自动化实现T+1的数据采集、加工等
计算结果实时性的比较低,只能用于离线处理
Lambda架构保留实时层、批处理层两条处理流程。批处理层用于离线处理大量数据,实时层用于实时处理数据,即最终会同时构建实时数仓和离线数仓。

Flink实时读取Kafka数据,回写到kafka ods贴源层topic
kafka dwd明细层topic同样的步骤,Flink读取dwd层数据写入到kafka dws汇总层topic
Lambda架构的优点是能够处理大量数据,同时也能够提供实时查询功能。
缺点是需要维护多个代码库和技术栈,增加了复杂度。
不同于Lambda架构,Kappa架构则是将Lambda架构中的批处理层去掉,只保留速度层和服务层。这种架构模式将所有数据都视为实时数据,通过流式处理进行实时计算和分析。

Kappa架构的优点是简化了架构,减少了复杂度,同时能提供实时查询功能。
缺点是只能处理实时数据,无法进行离线处理。
Apache Hudi对于多数计算引擎的支持度不够,特别是Delta完全是由Spark衍生而来,不支持Flink。对于Iceberg,Flink是完全实现了对接机制,且目前已经接入了doris,可以直接在doris中查询iceberg的数据,一起来看看其具备的功能:基于快照的读写分离和回溯
流批统一的写入和读取
非强制绑定计算引擎
支持ACID语义
支持表、分区的变更特性

存储介质由Kafka换成Iceberg,其余技术栈保持不变
Flink读取源头Kafka数据,结果存储到Iceberg ods层
继续执行后续的ods->dwd->dws层计算、结果存储
通过doris进行实时olap引擎查询分析、报表展示
综上分析,技术架构为flink + iceberg + doris
最后简单讲一下iceberg的使用,便于我们理解和使用数据湖。
# 启动flink集群
./start-cluster.sh
# 启动flink-sql客户端
./sql-client.sh embedded
-j /Users/casey/Data/install/flink-1.15.2/lib/iceberg-flink-runtime-1.15-1.1.0.jar
# 创建catelog
CREATE CATALOG hadoop_catalog WITH (
'type'='iceberg',
'catalog-type'='hadoop',
'clients'='5',
'property-version'='1',
'warehouse'='hdfs://172.22.224.113:8020/user/hive/warehouse'
);
# 使用刚创建的catelog
use catalog hadoop_catalog;
# 创建数据库
create database iceberg_sjc;
# 使用刚创建的数据库
use iceberg_sjc;
# 创建表
create table testA(
id bigint,
name string,
age int,
dt string)
PARTITIONED by(dt);
# 插入数据
insert into testA values(1001,' 张三',18,'2021-07-01'),(1001,' 李四',19,'2021-07-02');
原文作者:毛毛小妖的笔记;如有侵权,请联系管理员删除。