首页 > 其他分享 >Flink笔记

Flink笔记

时间:2022-11-07 20:56:23浏览次数:50  
标签:WatermarkStrategy Flink 笔记 水位 时间 WatermarkOutput public WatermarkGenerator

flink

水位线

处理时间

事件时间

自定义水位线策略

用来生成水位线的方法:.assignTimestampsAndWatermarks(),他主要用来为流中的数据分配时间戳,并生成水位线来指示事件时间

stream.assignTimestampsAndWatermarks(WatermarkStrategy<T> watermarkStrategy)
    //指定怎么从数据中指定时间戳,如果自定义Strategy可以不写
    .withTimestampAssigner();

.assignTimestampsAndWatermarks()方法需要传入一个 WatermarkStrategy 作为参数,这就是 所 谓 的 “ 水 位 线 生 成 策 略 ” 。 WatermarkStrategy 中 包 含 了 一 个 “ 时 间 戳 分 配 器”TimestampAssigner 和一个“水位线生成器”WatermarkGenerator。

public interface WatermarkStrategy<T> extends TimestampAssignerSupplier<T>,WatermarkGeneratorSupplier<T>{
 	@Override
 	TimestampAssigner<T> createTimestampAssigner(TimestampAssignerSupplier.Context context);
	@Override
    	WatermarkGenerator<T> createWatermarkGenerator(WatermarkGeneratorSupplier.Context context);
}

⚫ TimestampAssigner:主要负责从流中数据元素的某个字段中提取时间戳,并分配给元素。时间戳的分配是生成水位线的基础。

⚫ WatermarkGenerator:主要负责按照既定的方式,基于时间戳生成水位线。在WatermarkGenerator 接口中,主要又有两个方法:onEvent()和 onPeriodicEmit()。

⚫ onEvent:每个事件(数据)到来都会调用的方法,它的参数有当前事件、时间戳,以及允许发出水位线的一个 WatermarkOutput,可以基于事件做各种操作

⚫ onPeriodicEmit:周期性调用的方法,可以由 WatermarkOutput 发出水位线。周期时间为处理时间,可以调用环境配置的.setAutoWatermarkInterval()方法来设置,默认为200m

有序流使用WatermarkStrategy.forMonotonousTimestamps()即可

示例

 public static class CustomPeriodicGenerator implements WatermarkGenerator<Event> {
 	private Long delayTime = 5000L; // 延迟时间
 	private Long maxTs = Long.MIN_VALUE + delayTime + 1L; // 观察到的最大时间戳
 	@Override
 	public void onEvent(Event event, long eventTimestamp, WatermarkOutput output) {
 		// 每来一条数据就调用一次
 		maxTs = Math.max(event.timestamp, maxTs); // 更新最大时间戳
	}
 	@Override
 	public void onPeriodicEmit(WatermarkOutput output) {
 		// 发射水位线,默认 200ms 调用一次 -1是因为时间窗口左闭右开
 		output.emitWatermark(new Watermark(maxTs - delayTime - 1L));
 	} 
}

聚合函数(AggregateFunction)

富函数 RichFuction

有生命周期,有open和close方法,可以获取运行时上下文环境。

标签:WatermarkStrategy,Flink,笔记,水位,时间,WatermarkOutput,public,WatermarkGenerator
From: https://www.cnblogs.com/ljtstudy/p/16867407.html

相关文章

  • 《Zerocoin: Anonymous Distributed E-Cash from Bitcoin》论文学习笔记
    《Zerocoin:AnonymousDistributedE-CashfromBitcoin》论文学习笔记@目录《Zerocoin:AnonymousDistributedE-CashfromBitcoin》论文学习笔记【前导知识】1.电子......
  • Javascript(笔记23) - DOM基本操作 - 遍历节点树的方法
    Javascript(笔记23)-DOM基本操作-遍历节点树DOM的节点可以形成一个类型树的结构遍历节点树节点的类型上图看的是HTML的结构,主要指的是元素节点,但在DOM结构里,节点可不止......
  • 搭建一个小巧完备的K8S环境(chrono《kubernetes入门实战课》笔记整理)
     【概念说明】kubernetes,因为k和s之间,有8个字母,所以通常又称为K8S。用来对容器进行调度和管理的,即用来对容器进行编排的。如果只有简单的几个镜像,确实不需要k8s,但是如果......
  • FHE学习笔记 #2 多项式环
    https://en.wikipedia.org/wiki/Polynomial_ringhttps://zhuanlan.zhihu.com/p/419266064这篇知乎文章讲的比较透彻,但是不易理解,可以结合以下视频学习。无尽沙砾大佬的......
  • FHE学习笔记 #3 数论中的前置知识
    文章使用wolai编写并导出,在wolai中观看效果更好,有颜色高亮和实时更新不可约多项式IrreduciblePolynomialIrreduciblepolynomial-Wikipedia定义比较多,通俗......
  • 【HDLBits刷题笔记】15 Finding bugs in code
    Bugsmux2原本代码的逻辑是反的,这不是坑人吗。moduletop_module(inputsel,input[7:0]a,input[7:0]b,output[7:0]out);assignout......
  • Spring Boot 学习笔记
    SpringBoot概述在看完SSM的整合之后,使用Spring开发中配置Spring的环境会非常的繁琐,而Springboot的出现就解决了这个问题。SpringBoot入门导入springboot起步依赖......
  • Linux学习笔记(7)——认识与学习Bash
    认识与学习Bash认识与学习Bash一、认识Bash这个Shell1.1Shell1.2Bashshell的功能1.3查询命令是否为Bashshell的内置命令:type1.4命令执行与快速编辑按钮......
  • 狂神说Go语言笔记—初识Go语言
    GO语言的环境安装下载地址Go下载-Go语言中文网-Golang中文社区(studygolang.com)安装这里很简单,可以一直点下一步就可以了环境搭建我这里也是去D盘当中创建......
  • 读书笔记构建之法
    这段时间读了读构建之法,这是前两章的读书笔记:第一章概论在这一章中,作者为我们介绍了一些关于软件工程的基本知识。①软件=程序+软件工程:正是因为对软件开发活动(构建管......