一、为何要搭建实时数仓
随着业务快速发展或部分业务对实时依赖度大,使得越来越多的业务指标需要实时查看,以便于更好的进行业务分析、业务风控等,尤其在举行活动的时候,能够通过实时大屏等内容更好的把握活动的各项指标趋势。
二、实时架构及组件
1、架构
1.1、流批一体架构
1.2、lambda架构
Lambda本来是为了在处理大规模数据时,同时发挥流处理和批处理的优势,但是lambda架构也有如下痛点:
- 需要维护实时、离线两套引擎
- 需要维护两套业务逻辑相同的代码
- 因为两条不同的数据链路,容易造成数据不一致
- 数据更新成本高,需要重跑两个链路
架构是否需要盲目追随流批一体? 个人认为还是得看业务,不要盲目去追最新架构 ,如果因为数据格式或者重实时业务(例如直播,实时占比60%以上)走湖仓一体合适,如果业务量较小例如(rps 都个位数)建议还是选择lambda架构。
2、组件
2.1、计算引擎
- Storm(曾经)
- Spark StructedStreaming
- Flink(目前主流)
2.2、中间件
- Kafka(主流)
- Rocketmq
- Pulsar
2.3、olap
- Clickhouse
- Doris
- Adb、Hologres(阿里自研)
三、实时开发流程
1、数据接入
- 通过数据同步工具(flink cdc、maxwell、canal等) 将业务库(MySQL等)binlog数据接入中间件(Kafka、RocketMQ、Pulsar)的Topic中并通过实时平台(自研平台、阿里Dataphin、VVP)配置完成实时ODS流表(读取Topic内容(像视图))同步,并对实时链路配置报警规则(例如实时数据延迟大于1分钟、任务失败、内存告警等)。
- 自研数据接入/同步平台。
2、模型开发
2.1、模型开发简介
通过实时平台及计算引擎对ODS数据进行Join、清洗、转换、过滤、聚合、维度退化等(模型规范依旧采用之前建设思想) 完成DWD、DWS、ADS流表模型设计(部分公司这里不做dws,可能涉及原因链路过长影响实时进展),最后进行数据可视化。
2.2、模型设计原则
- 高内聚,低耦合 主要从数据业务特性和访问特性两个角度来考虑:将业务相近或者相关的数据、粒度相同数据设计为一个逻辑或者物理模型;将高概率同时访问的数据放一起,将低概率同时访问的数据分开存储。
- 一致性
- 流/表命名规范需清晰、一致,流/表名需易于下游理解和使用。
- 字段释义注释、核心逻辑注释、代码整体功能注释规范。
- 相同的字段在不同表字段名相同,可参考《OneData规范化数据定义》说明。
- 易用性 底层公用的处理逻辑应该放在实时公共流进行封装与实现,不要让公共的处理逻辑暴露给应用层实现,不要让公共逻辑在多处同时存在,尽量通过标签化处理。
- 时效性与易用性平衡 适当的数据冗余换取下游查询性能,不宜过度冗余与数据复制,结合实时指标处理性能和实际应用场景进行权衡。
2.3、平台化
自研实时模型开发平台。
2.4、任务测试
3、数据校验
根本是解决实时离线数据无法保持一致。
- 统一指标口径,同时复用指标中心逻辑。
- 保障数据来源一致。
- 拉消费点位跟离线比对。
4、数据落地
将ADS表数据落地OLAP(Doris、Clickhouse等)。
5、可视化
通过实时大屏工具(可通过阿里云Quick、DataV、网易有数、Finereport、开源Apache Superset)对ads数据进行展示。
6、实时监控
- 延迟告警
- 任务失败告警
- 主键冲突告警
- 数据波动告警
四、实时链路优化
1、调优目的
让任务在目标峰值RPS下,无延迟,且集群资源利用率在合理范围内。
2、优化思路
- 并发调优
- 内存调优
- sql调优
- 算子链优化
- checkpoint间隔合理
- 维表关联调优
Async+partitionjoin+缓存 原始的维表 JOIN 是同步访问的方式,来一条数据,去数据库查询一次,等待返回后输出关联结果。可以发现网络等待时间极大地阻碍了吞吐和延迟。为了解决同步访问的问题,异步模式可以并发地处理多个请求和回复,从而连续的请求之间不需要阻塞等待。
目前 HBase 提供三种缓存策略,分别是:
- None: 无缓存。
- LRU: 最近使用策略缓存,需要配置相关参数:缓存大小(cacheSize)和 缓存超时时间(cacheTTLMs)。
- ALL: 全量缓存策略。即在 Job 运行前会将远程表中所有数据 load 到内存中,之后所有的维表查询都会走 cache,cache 命中不到则不存在,并在缓存过期后重新加载一遍全量缓存。
五、实时技术如何量化产出
- 实时大屏开发 or 改造。
- 治理-监控保障体系迭代优化:由于近期新增较多无效报警,所以对监控指标、内容优化。
- 治理-资源消耗。
- 实时模型开发/治理。
- 实时风控指标开发。