Flink watermark浅析

本文介绍了Flink在实时计算中处理消息乱序的问题,通过watermark(水位线)机制来确保窗口计算的正确性。watermark是一个时间戳,用于解决事件时间的乱序,当watermark时间大于窗口结束时间时触发窗口计算。在Flink SQL中,可以在建表时声明watermark策略。
摘要由CSDN通过智能技术生成

一、功能

问题:Flink实时计算使用窗口时,消息会乱序,使用Event Time计算时,会有消息晚到。

解决方案:假设我们把延迟超过5秒的消息丢掉(或特殊处理),那么在每条消息上打一个时间戳(watermark 水位线),这个时间是事件时间减去5s,表示的含义是这个水位线之前的数据都到了,告诉窗口可以出发计算了。

 

补充时间概念:

(1)事件时间:业务系统的业务发生或更新时间。

(2)抽取时间:进入到消息队列的时间。

(3)处理时间:实时计算的时间。

二、原理

1、watermark本质是一个时间戳。

2、watermark要解决的是乱序问题。

3、窗口触发:当watermark时间戳大于窗口的结束时间。

 

三、如何使用

1、Flink SQL

需要在建表时声明。

CREATE TABLE user_actions (
  user_name STRING,
  data STRING,
  user_action_time TIMESTAMP(3),
  -- 声明 user_action_time 是事件时间属性,并且用 延迟 5 秒的策略来生成 watermark
  WATERMARK FOR user_action_time AS user_action_time - I
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值