记 - 实时数仓开发实践 - doris/pg/flink

本文探讨了如何通过Debezium-Flink框架将实时数据流聚合并写入Doris,比较了UNIQUEKEY与AGGREGATEKEY模式的性能与特性。重点讲述了如何优化查询性能,减少delete/insert操作,以及key字段选择和特殊字符串解析的问题。最后,总结了在Doris中使用的关键点和注意事项。

业务场景描述 - 实时数仓

  1. 查询性能在毫秒级
  2. 业务数据可以随意修改、删除数据等操作
  3. 指标计算需求涉及跨多个表关联查询,4个union all [即5个select],涉及大表的json字符串解析与计算
  4. 存在json字符串解析,且解析后数据做聚合,再做差值

环境描述

doris 1.1

debezium - flink - doris 框架实现

doris - UNIQUE KEY 模式实现

实现思路1: flink 消费kafka明细数据到doris,表模型为UNIQUE KEY 模式,用普通视图包装ETL逻辑,供外部查询;但是经过验证发现查询性能在秒级,尝试进行慢sql优化。

针对慢sql的优化尝试:

  1. 使用rollup单表提前聚合,但是不支持按部分主键聚合;
  2. 优化表前缀索引,查询性能有所提升,但还是在秒级范围内;
  3. 把json字符串解析功能提前完成同时删除表无关字段;

结论: 同步明细数据到doris中ETL,数据查询性能无法达到预期的时间要求。【未解决问题】

实现思路2: flink 消费kafka明细数据经过ETL计算聚合后sink到doris,用普通视图包装ETL逻辑。

结论: 同步聚合数据到doris进行查询,数据查询性能达到预期的时间要求。

doris - AGGREGATE KEY 模式实现

1、flink 消费kafka明细数据经过ETL计算聚合后sink到doris,用普通视图包装ETL逻辑;
2、【flink 计算原理解析】flink 是有状态的计算,每次的输出都是把历史状态+当前状态的数据做逻辑计算后sink到目标表,因此非key字段要的value要设置为replace;此时的模式即是UNIQUE KEY模式的实现。【UNIQUE KEY仅是AGGREGATE KEY的一种特例形式】

结论: 同步聚合数据到doris进行查询,数据查询性能达到预期的时间要求。

debezium - flink - PostgreSQL 框架实现

实现思路:
flink 消费kafka明细数据,flink任务中数据聚合计算后同步到PostgreSQL数据库
结论: 同步聚合数据到doris进行查询,数据查询性能达到预期的时间要求。

doris 使用总结

尽量减少 delete/insert操作

1、delete/insert操作,性能较慢;建议减少deleted/insert操作或者加大批量写入。

作为key字段不能为null

  1. 要注意key字段不能为空,某一些业务场景可能作为key字段为null ,数据会写入失败。

key字段为null报错如下
Column ‘birth_date’ is NOT NULL, however, a null value is being written into it. You can set job configuration ‘table.exec.sink.not-null-enforcer’=‘drop’ to suppress this exception and drop such records silently.

UNIQUE KEY 模式对rollup的支持

CREATE TABLE XXXX (
  event_id bigint(20) NULL COMMENT "",
  animal_id bigint(20) NULL COMMENT "",
  org_id bigint(20) NULL COMMENT "",
  pig_num bigint(20)
) ENGINE=OLAP
UNIQUE KEY(event_id, animal_id, org_id)
COMMENT "OLAP"
DISTRIBUTED BY HASH(org_id) BUCKETS 32
PROPERTIES (
"replication_allocation" = "tag.location.default: 3",
"in_memory" = "false",
"storage_format" = "V2"
);

执行
ALTER TABLE DB.XXX ADD ROLLUP r1(org_id, pig_num);
报错信息: SQL 错误 [1105] [HY000]: errCode = 2, detailMessage = Rollup should contains all unique keys in basetable

加入全部主键,没有问题
ALTER TABLE test_bigdata_realtime_metrics.dwd_fpf_anc_event_list0727 ADD ROLLUP r1(event_id,org_id,animal_id, pig_num);

官网说是支持的,有兴趣可以查看:https://doris.apache.org/zh-CN/docs/data-table/hit-the-rollup/#aggregate-%E5%92%8C-unique-%E6%A8%A1%E5%9E%8B%E4%B8%AD%E7%9A%84-rollup

结论:UNIQUE KEY 模式不支持单一主键 rollup,必须包含表所有主键

AGGREGATE KEY 模式对rollup的支持

CREATE TABLE db.XXX (
  event_id bigint(20) NULL COMMENT "",
  animal_id bigint(20) NULL COMMENT "",
  org_id bigint(20) NULL COMMENT "",
  pig_num bigint(20) SUM
) ENGINE=OLAP
Aggregate KEY(event_id, animal_id, org_id)
COMMENT "OLAP"
DISTRIBUTED BY HASH(org_id) BUCKETS 32
PROPERTIES (
"replication_allocation" = "tag.location.default: 3",
"in_memory" = "false",
"storage_format" = "V2"
);

使用单一主键创建 ROLLUP :
ALTER TABLE db.XXX ADD ROLLUP r1(org_id , pig_num);

结论: 执行成功,支持单一主键

AGGREGATE KEY 模式 - 验证insert/delete

建表语句

CREATE TABLE `dws_fmc_piglet_got_
课程总体架构请观看89讲。数据仓库是一个面向主题的、集成的、随时间变化的、但信息本身相对稳定的数据集合,用于对管理决策过程的支持。数据仓库的应用有:1.数据分析、数据挖掘、人工智能、机器学习、风险控制、无人驾驶。2.数据化运营、精准运营。3.广告精准、智能投放等等。数据仓库是伴随着企业信息化发展起来的,在企业信息化的过程中,随着信息化工具的升级和新工具的应用,数据量变的越来越大,数据格式越来越多,决策要求越来越苛刻,数据仓库技术也在不停的发展。数据仓库有两个环节:数据仓库的构建与数据仓库的应用。随着IT技术走向互联网、移动化,数据源变得越来越丰富,在原来业  务数据库的基础上出现了非结构化数据,比如网站log,IoT设备数据,APP埋点数据等,这些数据量比以往结构化的数据大了几个量级,对ETL过程、存储都提出了更高的要求。互联网的在线特性也将业务需求推向了实时化 ,随时根据当前客户行为而调整策略变得越来越常见,比如大促过程中库存管理,运营管理等(即既有中远期策略型,也有短期操作型)。同时公司业务互联网化之后导致同时服务的客户剧增,有些情况人工难以完全处理,这就需要机器 自动决策 。比如欺诈检测和用户审核。总结来看,对数据仓库的需求可以抽象成两方面: 实时产生结果、处理和保存大量异构数据。本课程基于真实热门的互联网电商业务场景为案例讲解,结合分层理论和实战对数仓设计进行详尽的讲解,基于Flink+DorisDB实现真正的实时数仓,数据来及分析,实时报表应用。具体数仓报表应用指标包括:实时大屏分析、流量分析、订单分析、商品分析、商家分析等,数据涵盖全端(PC、移动、小程序)应用,与互联网企业大数据技术同步,让大家能够学到大数据企业级实时数据仓库的实战经验。本课程包含的技术: 开发工具为:IDEA、WebStorm Flink 1.11.3Hadoop 2.7.5Hive 2.2.0ZookeeperKafka 2.1.0、Spring boot 2.0.8.RELEASESpring Cloud Finchley.SR2Flume 、Hbase 2.2.6DorisDB 0.13.9、RedisVUE+jQuery+Ajax+NodeJS+ElementUI+Echarts+Datav等课程亮点: 1.与企业接轨、真实工业界产品2.DorisDB高性能分布式数据库3.大数据热门技术Flink最新版4.真正的实时数仓以及分层设计5.海量数据大屏实时报表6.数据分析涵盖全端(PC、移动、小程序)应用7.主流微服务后端系统8.数据库实时同步解决方案9.涵盖主流前端技术VUE+jQuery+Ajax+NodeJS+ElementUI+Echarts+Datav10.集成SpringCloud实现统一整合方案11.互联网大数据企业热门技术栈12.支持海量数据实时数仓报表分析13.支持全端实时实时数仓报表分析14.全程代码实操,提供全部代码和资料 15.提供答疑和提供企业技术方案咨询企业一线架构师讲授,代码在老师的指导下企业可以复用,提供企业解决方案。  版权归作者所有,盗版将进行法律维权。 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值