实时计算 Watermark概念

Watermark中文翻译为“水位线”,在流计算中用得很多。如下图,是我在使用阿里实时计算平台代码中用到的Watermark水位线。(数据来源为阿里云日志服务)

CREATE TABLE log_submit (
  aid VARCHAR,
  bid VARCHAR,
  log_time TIMESTAMP,
  WATERMARK FOR log_time AS withOffset (log_time, 10000)  --WaterMark为10秒
) WITH (
  type = 'sls',
  endPoint = 'xxxx',
  roleArn = 'xxxx',
  project = 'xxxx',
  logStore = 'log_submit'
);

那么水位线WATERMARK究竟有什么作用?

假设一个流式框架,如果消息一个一个按顺序发送,代码中也按顺序依次处理,那么则没有任何问题。

但是,有些场景下,消息不是按顺序发送,产生乱序了,这个时候可以用水位线WATERMARK处理。

具体什么意思?

根据事件的event_time(上面代码中的log_time),计算出WATERMARKS,并设置一些延迟,给迟到的数据一些机会,即只等待迟到的数据一段时间。

举个🌰,假设设置10秒的滚动窗口函数,那么0~10s,10~20s都是一个窗口。以0~10s为例,0为start-time,10为end-time。假如有4个数据的event-time分别是8(A), 12.5(B), 9(C), 13.5(D),我们设置Watermarks为当前所有到达数据event-time的最大值减去延迟值3.5秒,也就是说对于迟到的数据,我们只等你3.5秒。

当A到达的时候,Watermarks为max{8}-3.5=8-3.5 = 4.5 < 10,不会触发计算

当B到达的时候,Watermarks为max(12.5,8)-3.5=12.5-3.5 = 9 < 10,不会触发计算

当C到达的时候,Watermarks为max(12.5,8,9)-3.5=12.5-3.5 = 9 < 10,不会触发计算

当D到达的时候,Watermarks为max(13.5,12.5,8,9)-3.5=13.5-3.5 = 10 = 10,触发计算

触发计算的时候,会将AC(因为他们都小于10)都计算进去

 

通过上面这种方式,我们就将迟到的C计算进去了。

这就是水位线的一个大概含义。

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值