第 195 题:流批一体架构,统一SQL的语义差异处理?
题目
流批一体架构,统一SQL的语义差异处理?
完整讲解
一、流批一体的目标
流批一体:用同一套 API 与引擎(如 Flink)既跑流处理(无界流、实时)又跑批处理(有界数据集、离线),减少两套系统的维护与语义不一致,支持「同一 SQL/程序,批是流的特例」。
二、统一 SQL 的语义差异
- 核心差异:批是有界、流是无界;批可全量扫描后输出、流需增量与窗口/触发。统一 SQL 需在语义上兼容:同一 SELECT/聚合在批上一次性算完,在流上按窗口或持续输出。
- 有界流:流式引擎把「有界数据」(如一次导入)当有界流处理,执行完即结束,语义上接近批;Flink 的 Batch 模式即此类。
- 聚合与窗口:流上 GROUP BY 需配合窗口(Tumble/Session)或状态(当前全局聚合);批上 GROUP BY 可直接全量聚合。统一时:流上显式窗口或 Emit 策略,批上可隐式「全量窗口」。
- 语义对齐:保证相同输入下批与流结果一致(如事件时间窗口 + 相同 watermark 策略);差异处(如流上 late 数据、处理时间)需文档化与可配置。
三、工程要点
- 存储与元数据统一(如 Hive 表同时支持流读与批读);运行时选 Stream 或 Batch 执行模式;测试时用同一数据集对比批与流结果。
面试要点
- 能说清流批一体的目标(一套 API、语义一致);能说明批有界、流无界的差异及「有界流」的处理方式。
- 能解释统一 SQL 下聚合/窗口的差异:流需窗口或状态、批可全量;能简述如何保证批流结果一致。
- 能提及存储与执行模式(Stream/Batch)、测试对比。
记忆要点
- 流批一体=同一 API,批有界、流无界;有界流当批处理。统一 SQL:流需窗口/状态,批可全量;需保证结果一致。
- 工程:存储与元数据统一、执行模式、批流结果对比测试。