flink watermark生成,向前推进时钟
2020-04-17 本文已影响0人
Jaming
eventTime
eventTime根据事件中的某个字段指定(assignTimestampsAndWatermarks)
watermark
watermark有两种生成方式:
1、Periodic Watermarks
周期性的触发watermark的生成和发送
2、Punctuated Watermarks
根据事件中的特殊关系生成和发送
watermark推进---事件时间时钟
flink内部算子都有一个接收数据分区和发送数据分区,每个接收数据分区对应上游的发送数据分区。
当某一个分区的watermark到来的时候,会首先跟当前分区的watermark进行比较,取最大值并更新为当前分区的watermark。然后比较所有分区的watermark最小值,如果比当前的事件时间时钟大,则更新当前的事件时间时钟,向下游发送watermark。
watermark.png
如图:
第一个分区当前watermark为3,当4来的时候跟3比,将当前的watermark更新为4,之后跟所有分区的当前watermark比,取最小的watermark,发现没有变化,所以不更新事件时间时钟。
当第三个分区5来的时候,跟2比,然后将当前分区watermark更新为5,再比较当前分区所有watermark,最小值为4,比2大,将事件时间时钟更新为4,并向下游发送watermark为4。同时触发4之前的定时器。