想要使用watermark,则时间事件类型必须是EventTime,代码必须如下设置

env = StreamExecutionEnvironment.getExecutionEnvironment();
env.setStreamTimeCharacteristic(TimeCharacteristic.EvenTime);

由于Watermark extends StreamElement,所以它是一个流元素,但是,如果你要这么理解,那就有些复杂了,下面是我个人的理解,watermark是个延迟时间,具体是延迟触发窗口的,下面是一段没有watermark的代码

.timeWindowAll(Time.minutes(1));

这段代码表示,每到达一个分钟整点,统计前一分钟的数据,比如,现在的时间是下午16:01:03,那么当时间达到16:02:00的时候,会统计16:01:00-----16:02:00之间的数据

那么我对上述代码加上一个watermark

public Watermark getCurrentWatermark(){return new Watermark(System.currentTimeMillis-60000);
}

则表示到达本应触发窗口的时间,但是不触发,而是再等60000毫秒触发,其目的是有可能本应该到达的数据还没有达到,所以再等等,可以理解成坐火车飞机,整个火车的人,都在等你这个迟到的人

对于有watermark的窗口,假设现在的时间是下午16:01:03,那么当时间达到16:02:00的时候,该窗口不会统计16:01:00-----16:02:00之间的数据,而是继续接收属于16:01:00-----16:02:00,直到16:03:00,才会开始统计16:01:00-----16:02:00之间的数据,这就是watermark的作用

API
方法签名:AssignerWithPeriodicWatermarks.getCurrentWatermark

public interface AssignerWithPeriodicWatermarks<T> extends TimestampAssigner<T> {/*** 获取窗口延迟时间*/@NullableWatermark getCurrentWatermark();
}

下面是一个延迟1分钟统计的实现

public Watermark getCurrentWatermark(){return new Watermark(System.currentTimeMillis-60000);
}

方法签名:TimestampAssigner.extractTimestamp

public interface TimestampAssigner<T> extends Function {long extractTimestamp(T element, long previousElementTimestamp);
}

参数element:进入窗口的一条数据,假设当前窗口有10条数据,那么窗口触发的时候,则会走10次该方法。
参数previousElementTimestamp:注释上说是上一个元素的时间戳,但是通过打印出来,每次都是最小值,所以我不知道。。。。似乎没用到???
返回值long:当前这条数据的时间戳

Flink-org.apache.flink.streaming.api.watermark.Watermark相关推荐

  1. 《从0到1学习Flink》—— Apache Flink 介绍

    前言 Flink 是一种流式计算框架,为什么我会接触到 Flink 呢?因为我目前在负责的是监控平台的告警部分,负责采集到的监控数据会直接往 kafka 里塞,然后告警这边需要从 kafka topi ...

  2. 【Flink】Apache Flink 1.13.0 正式发布,流处理应用更加简单高效

    1.概述 转载:Apache Flink 1.13.0 正式发布,流处理应用更加简单高效 侵权可删,这里是做个笔记,防止找不到. Flink 1.13 发布了!Flink 1.13 包括了超过 200 ...

  3. 阿里云大学Apache Flink大数据学习笔记

    之前有看过一些基础的大数据课程,现在又回来发现这里的课程更新还是蛮快的,讲的内容干货也很多,继续学习一下,下面是一些主要内容说明. 地址:https://developer.aliyun.com/le ...

  4. 一文了解 Apache Flink 核心技术

    作者:伍翀 Apache Flink 介绍 Apache Flink (以下简称Flink)是近年来越来越流行的一款开源大数据计算引擎,它同时支持了批处理和流处理,也能用来做一些基于事件的应用.使用官 ...

  5. Apache Flink 简介和编程模型

    Apache Flink是一个同时支持分布式数据流处理和数据批处理的大数据处理系统. Flink可以表达和执行许多类别的数据处理应用程序,包括实时数据分析,连续数据管道,历史数据处理(批处理)和迭代算 ...

  6. Apache Flink OLAP引擎性能优化及应用

    精选30+云产品,助力企业轻松上云!>>> 摘要:最近我们也正打算做OLAP分析平台,在调研的过程中,发现已有的成熟技术只能满足我们的部分需求,相信大家也有这样的困惑,本文分享的是来 ...

  7. Apache Flink ML 2.2.0 发布公告

    来源 | Apache Flink 官方博客 翻译 | 林东 Apache Flink 社区很荣幸地宣布 Apache Flink ML 2.2.0 版本正式发布!本次发布的版本重点添加了 Flink ...

  8. 《从0到1学习Flink》—— 介绍Flink中的Stream Windows

    前言 目前有许多数据分析的场景从批处理到流处理的演变, 虽然可以将批处理作为流处理的特殊情况来处理,但是分析无穷集的流数据通常需要思维方式的转变并且具有其自己的术语(例如,"windowin ...

  9. Flink —— 什么是Flink?

    Flink -- 什么是Flink? Apache Flink - 有状态人数据流分布式计算引擎. 什么是流处理? 在自然环境中,数据的产生原本就是流式的.无论是来自 Web 服务器的事件数据,证券交 ...

  10. NoClassDefFoundError: org/apache/flink/streaming/api/datastream/DataStream一例解决

    很惊讶居然会犯这种低级错误.... 明明intellij里面都resolve了,没有波浪线提示,为啥一运行就: NoClassDefFoundError: org/apache/flink/strea ...

最新文章

  1. 删除数组中指定元素_如何删除PHP数组元素键值并重新排序
  2. python四大软件-Python未来可能面临的四大转折
  3. python一:hello world
  4. iOS逆向之深入解析MachO文件
  5. C语言文字加密程序的实现
  6. [css] 当一个元素被设置为浮动后,它的display值变为什么呢?
  7. 4-1k近邻算法(k-Nearest Neighbors)
  8. python词云有什么用_使用Python定制词云
  9. 【Flink】Flink 源码之 安全认证 kerberos 认证
  10. vue路由传多个参数_vue路由传参(两种方法总结)
  11. [Linux程序设计][调试][splint]
  12. 计算机程序可以通过删除卸载嘛,怎么彻底卸载电脑软件程序多种方法
  13. 小白C语言编程实战(16):统计4门课的优秀率和不及格率
  14. 数据库系统的主要组成部分
  15. 【深度学习环境配置二】【Pytorch安装详解-内附下载链接】基于win 10+TITAN XP+CUDA11.1+python3.7+vs2019的pytorch安装
  16. java 调用kettle ktr_java调用kettle数据库类型资源库中的ktr
  17. C++实现石头剪刀布
  18. 一个图形数据维护工具架构设计
  19. MATLAB 基础与通信系统仿真
  20. python-gitlab

热门文章

  1. 微信公众号JSSDK中的wx.ready()和wx.error()问题
  2. Activiti的ProcessEngine的基本配置
  3. 黑苹果hidp显示不清楚_魔兽世界9.0:盟约指挥台不显示胜率?搞清楚机制,轻松收菜!...
  4. php开源qq群,QQ群免IDKEY加群PHP源码
  5. for循环十万条数据内存溢出_强如 Disruptor 也发生内存溢出?
  6. log4j不打印日志
  7. sqlerror.java.1055,请问大佬,eclipse连接数据库出现这个错误怎么办
  8. ideadebug热更新_Spring Boot 在IDEA中debug时的hot deployment(热部署)
  9. linux 终端最大化命令,11个让你吃惊的Linux终端命令
  10. Linux下修改系统时间并写入BIOS