Structured Streaming和flink都支持流式操作,支持对乱序数据的处理,都引入了watermark的概念,watermark都是系统能处理的乱序数据的最早的时间,但二者的具体表现也不尽相同。
1、Structured Streaming的watermark机制
-
(a+) 在对 event time 做 window() + groupBy().aggregation() 即利用状态做跨执行批次的聚合,并且
-
(b+) 输出模式为 Append 模式或 Update 模式
时,Structured Streaming 将依靠 watermark 机制来限制状态存储的无限增长、并(对 Append 模式)尽早输出不再变更的结果。
如果既不是 Append 也不是 Update 模式,或者是 Append 或 Update 模式、但不需状态做跨执行批次的聚合时,则不需要启用 watermark 机制。
watermark的更新

1)spark任务执行以集群时间为准,window操作处理当前时间段(与event time无关)收到的数据,如图中每隔5min进行一次window操作,window的长度是10min。
2)watermark在每个window操作进行时更新,为当前收到的最大的event time-允许的延迟时间,如:图中12:15的batch,watermark为这期间收到的最大的event time12:14-10=12:04,当前的watermark会在下一次计算时用到。
3)当watermark超过window endtime的时候,认为那个window的数据已经不再变化,会输出计算结果,state store清

本文深入探讨了Structured Streaming和Flink的watermark机制,用于处理流式数据中的乱序问题。Structured Streaming在特定场景下依赖watermark限制状态增长并尽早输出结果。Flink则区分Event Time、Ingestion Time和Processing Time,并提供Periodic和Punctuated两种Watermark生成方式。Flink的allowedLateness允许一定延迟接收迟到数据,确保窗口正确触发。
最低0.47元/天 解锁文章
810

被折叠的 条评论
为什么被折叠?



