首页/数据/数据工程与 ETL 速查/有界数据与无界数据 Bounded/Unbounded
管道基础52 条

有界数据与无界数据 Bounded/Unbounded

有界数据有明确起止,批处理器一次读完全部即可出结果;无界数据没有终点,流处理器必须依靠窗口、水位线与增量状态持续产出结果。

有界 Bounded起止明确,如一天的日志文件、一个分区
无界 Unbounded持续追加、无终点,如 MQ 事件流
同一逻辑同一段聚合 SQL 可对应跑在有界表和无界流上

批处理可以对整个数据集做全局排序、全局聚合;流处理只能基于窗口或增量算子近似实现,因为永远等不到数据全部到齐。

Flink SQL:同一 SUM 聚合的两种数据源

Flink SQL:同一 SUM 聚合的两种数据源
-- 有界:读文件批模式
SELECT region, SUM(amount) FROM orders_file GROUP BY region;

-- 无界:读 Kafka 流,按 1 分钟滚动窗口
SELECT TUMBLE_START(ts, INTERVAL '1' MINUTE) AS w,
       region, SUM(amount)
FROM orders_kafka
GROUP BY TUMBLE(ts, INTERVAL '1' MINUTE), region;
判断任务属于批还是流,先看输入是否有界;有界任务用调度器跑,无界任务用常驻作业加监控。

易错点

  • 把无界流当有界表写“到齐再算”的逻辑,会得到永远不触发的下游
  • 无界任务没有“跑完”概念,监控要看延迟与积压,而不是任务状态

数据来源与参考

  • Apache Flink 官方文档:Bounded and Unbounded Streams
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌