近实时计算探索
什么是近实时计算
近实时计算是一种基于数据湖技术,在分钟级别(5-30分钟延迟)实现数仓增量计算的方案,通过周期性调度任务以折中成本实现低延迟数据处理。
Spark SQL如何对Hudi表进行增量读、快照读
- HudiCall命令:新增于Hudi 0.11.0版本,支持
run_compaction、run_clustering等运维操作,以及增量读和快照读。
- 增量读:使用
copy_to_temp_view命令,指定query_type='incremental'和起止时间。
- 快照读:使用
copy_to_temp_view命令,指定query_type='snapshot'和快照时间。
涂鸦智能在Hudi+ SparkSQL +调度的近实时计算落地实践
- 架构:采用ODS层原始数据,通过调度系统按业务时间触发增量计算。
- 调度时间分类:调度时间(配置执行时间)、业务时间(调度时间±1天)、执行时间(实际执行时间)。
- 计算方式:DW层全部采用增量计算,链路轻量。
近实时计算中宽表建设
- 实时方案:流表Join(Regular/Interval Join、Temporal Join),存在窗口大小调整难题和缓存一致性问题。
- 离线方案:全量数据Join,易因数据量大导致任务失败和延迟。
- 部分列更新payload:使用
PartialUpdateAvroPayload实现部分列更新。
- 宽表更新方案:
- 主键一致:通过增量数据Union All更新宽表,避免全量读取。
- 非一致主键:先插入主表增量数据,再通过快照数据增量更新扩展属性。
- 存在问题:非一致主键需全表扫描,资源竞争导致延迟。
- 收益:相比实时方案成本低、执行稳定;相比离线方案任务更稳定、提前业务产出时间、开发成本低。
未来展望
- 近实时计算将支持二级索引更新方式、HudiMetrics监控、Table Service平台化。