我来讲下 我理解的WaterMark (一起探讨) /*** * 如果要去了解一个东西 : 我认为需要从以下几个点去分析 * 1. 是什么(概念一点) * 2. 解决了什么问题以及是如何解决的 * 3. 如果去使用 如何下手 * 4. 他会牵扯的一些问题 * * 好了 让我们去探讨这个东西 * 1. 首先 WaterMark 是一个全局标签,本身是一个时间戳 * 2. 其次 我认为它解决的问题 就是 窗口的触发时机以及对于乱序数据的数据保障(或者说数据乱序情况下依然分配进属于它的窗口中) * { * 1.窗口的触发时机问题: (有两个关键词 1:Partition Watermark , 2:事件时间时钟) * -- 任务会对flink的输入分区维护相应的Partition Watermark. * 当检测到某一分区有输入后,系统会提取该输入事件的watermark与当前分区的watermark 进行比较 * 并将大的watermark更新当前Partition watermark(相当于是一个更新操作); * 更新后会将 Partition Watermark (分区) 中最小的那个watermark 作为事件时间时钟 向下游发送 后续就是trigger的操作了 * [watermark 就是告诉算子 不用再等 那些时间戳小于或等于该WaterMark的事件了] * * 2. 乱序数据的数据保障 * -- 可以在接收到事件后根据事件本身所携带的时间 - 延迟时间 后 通过 assigner 去做具体数据分配 * } * * 摘抄 有一个例子: 就是你在走,后面有一个小朋友也在走。他和你保持一个距离,小朋友只前进不后退。你有可能后退。 * 但是如果你比小朋友还慢,就表示你迟到太久了,应该被单独处理(丢弃/sideOutput)。 * * 3. 关于具体使用的话 只需要去实现 两种WaterMark的生成接口 按照自己业务去生成 其他信息看具体实现 * {@link org.apache.flink.streaming.api.functions.AssignerWithPeriodicWatermarks<T>} * {@link org.apache.flink.streaming.api.functions.AssignerWithPunctuatedWatermarks<T>} * * 4. 牵扯到的问题 { * 1. 生成水位线的频率 快/慢 各有优缺 * } */
Flink WaterMark 的了解 (更新)
最新推荐文章于 2023-02-23 18:04:59 发布