5.3.3 watermark 机制总结
watermark 在用于基于时间的状态聚合操作时, 该时间可以基于窗口, 也可以基于 event-timeb本身.
输出模式必须是
append
或update
. 在输出模式是complete
的时候(必须有聚合), 要求每次输出所有的聚合结果. 我们使用 watermark 的目的是丢弃一些过时聚合数据, 所以complete
模式使用wartermark
无效也无意义.在输出模式是
append
时, 必须设置 watermask 才能使用聚合操作. 其实, watermask 定义了 append 模式中何时输出聚合聚合结果(状态), 并清理过期状态.在输出模式是
update
时, watermask 主要用于过滤过期数据并及时清理过期状态.watermask 会在处理当前批次数据时更新, 并且会在处理下一个批次数据时生效使用. 但如果节点发送故障, 则可能延迟若干批次生效.
withWatermark
必须使用与聚合操作中的时间戳列是同一列.df.withWatermark("time", "1 min").groupBy("time2").count()
无效withWatermark
必须在聚合之前调用.f.groupBy("time").count().withWatermark("time", "1 min")
无效