核心要点
批处理面向有界数据,一次性读全量、追求高吞吐,结果延迟较高(如 T+1 报表)
流处理面向无界数据,事件到达即处理,追求秒级/毫秒级低延迟
Flink 是原生流引擎,支持事件时间、Watermark 处理乱序、有状态计算与 Exactly-Once
Spark Structured Streaming 是微批模型,把流切成小批,延迟通常略高于原生流
标准回答
有界 vs 无界数据
批处理处理的是有界数据集:数据已落地,作业一次性读取全量,强调吞吐和资源利用率,典型如离线数仓 T+1 跑批。流处理处理无界数据:事件持续流入,作业长期运行,强调端到端低延迟,典型如实时风控、监控大盘。
Flink 的关键能力
Flink 以原生流为核心,批被视为流的特例。它支持事件时间(按数据自带时间戳计算,而非到达时间),用 Watermark 衡量进度并容忍乱序,配合窗口触发结果。Flink 通过分布式快照(Chandy-Lamport)做状态一致性 Checkpoint,可保证 Exactly-Once 语义。
与 Spark Structured Streaming 对比
Spark Structured Streaming 采用微批:把流切成小批次复用批引擎,实现简单、生态成熟,但延迟受批间隔限制,通常在百毫秒到秒级;Flink 逐条处理,延迟更低,状态与事件时间支持更原生。选型时高吞吐离线选批,低延迟有状态实时优先 Flink。
常见误区
⚠️ 常见踩坑
勿把"实时"等同于处理时间;生产中按事件时间+Watermark 才能正确处理乱序与延迟数据。也别认为 Spark 只能批处理,它有 Structured Streaming,只是微批模型。
追问
追问 1:Watermark 是什么,解决什么问题?
Watermark 是流中携带的时间戳标记,表示"事件时间小于该值的数据已基本到齐"。它用于在乱序数据下决定窗口何时触发计算,在等待迟到数据与降低延迟之间做权衡,超过 Watermark 仍迟到的数据可丢弃或走侧输出补偿。
追问 2:Flink 如何保证 Exactly-Once?
Flink 周期性做分布式快照 Checkpoint,对算子状态与 Source 偏移量一致性快照;故障时回滚到最近 Checkpoint 重放。要端到端 Exactly-Once,还需 Sink 支持两阶段提交(如 Kafka 事务)或幂等写入。
延伸学习
与本题相关的知识库文章、术语、工具与行业资讯。