Flink水印机制和应用
1. Flink流处理时间方式
-
EventTime[事件时间]
事件发生的时间,例如:点击网站上的某个链接的时间
-
IngestionTime[摄入时间]
某个Flink节点的source operator接收到数据的时间,例如:某个source消费到kafka中的数据
-
ProcessingTime[处理时间]
某个Flink节点执行某个operation的时间,例如:timeWindow接收到数据的时间
2. 水印机制产生的原因
在实际环境中,经常会出现,因为网络原因,数据有可能会延迟一会才到达Flink实时处理系统。
我们来设想一下下面这个场景:
- 使用时间窗口来统计10分钟内的用户流量
- 有一个时间窗口
- 开始时间为:2017-03-19 10:00:00
- 结束时间为:2017-03-19 10:10:00
- 有一个数据,因为网络延迟
- 事件发生的时间为:2017-03-19 10:
10:00 - 但进入到窗口的时间为:2017-03-19 10:10:
02,延迟了2秒中
- 事件发生的时间为:2017-03-19 10:
- 时间窗口并没有将
59这个数据计算进来,导致数据统计不正确
这种处理方式,根据消息进入到window时间,来进行计算。在网络有延迟的时候,会引起计算误差。
3. 使用水印解决网络延迟问题
水印(watermark)就是一个时间戳,Flink可以给数据流添加水印,

本文深入探讨Flink流处理中的水印机制,解释其如何解决网络延迟问题,确保事件时间准确性。通过实例演示,展示如何在代码中实现水印,以精确计算时间窗口内的数据。
最低0.47元/天 解锁文章
851

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



