GlobalWindow和Evictor的常用组合使用

背景

在平时的flink开发中,一旦我们使用到GlobalWindow,那么肯定也就意味着会搭配Evictor以及Tigger一起使用,只有这样才能触发窗口处理函数并且窗口内的元素数量限定在特定的范围内

GlobalWindow和Evictor常见组合用法

先看一下具体的搭配的例子:

public class GlobalWindowJob {public static void main(String[] args) throws Exception {StreamExecutionEnvironment see = StreamExecutionEnvironment.getExecutionEnvironment();see.setStreamTimeCharacteristic(TimeCharacteristic.ProcessingTime);// see.getCheckpointConfig().enableUnalignedCheckpoints();DataStream<WikipediaEditEvent> edits = see.addSource(new RandomStringSource());KeyedStream<WikipediaEditEvent, String> keyedEdits = edits.keyBy(new KeySelector<WikipediaEditEvent, String>() {@Overridepublic String getKey(WikipediaEditEvent event) {return event.getUser();}});DataStream<String> result =keyedEdits.window(GlobalWindows.create()).trigger(CountTrigger.of(20)).evictor(CountEvictor.of(10)).process(new ProcessWindowFunction<WikipediaEditEvent, String, String, GlobalWindow>() {@Overridepublic void process(String s, Context context, Iterable<WikipediaEditEvent> elements,Collector<String> out) throws Exception {WikipediaEditEvent start = Iterables.getFirst(elements, null);WikipediaEditEvent end = Iterables.getLast(elements, null);int size = Iterables.size(elements);out.collect("key: " + s + " start: " + start.getTimestamp() + " end: "+ end.getTimestamp() + " size:" + size);}});result.print();see.execute();}
}

如上代码所示,我们分别使用到了GlobalWindow,Trigger,Evictor以及处理函数processFunction,下面我们大概看一下这几个在组件在flink开发中的作用.

1.GlobalWindow 特殊的全局Window分配器,此外还有基于时间属性的TimeWindow,它决定了元素应该要分配到哪个窗口中,此外,每个Window分配器默认都有一个对应的Trigger,GlobalWindow对应的默认Trigger是NoTrigger触发器,而TimeWindow对应的默认触发器Trigger是到点触发,如果代码中显示指定了窗口Trigger,那么窗口分配器的默认Trigger将会被覆盖

2.触发器Trigger,这个是决定了什么时候对窗口的元素进行计算或者清除窗口内容,返回值continue表示什么都不做,也就是不会触发窗口计算,也不会触发窗口内容清理,返回值fire表示触发窗口计算,当然触发窗口计算前后需要先经过Evictor过滤,返回值purge表示清除窗口包括窗口元素和所有的状态,窗口会一直占用flink的资源直到返回purge值.

3.淘汰器Evictor,当Trigger触发器返回fire后,在把集合元素交由processFunction处理之前或者之后,集合的元素会被交由Evictor进行过滤操作,此时Evictor可以决定窗口中哪些元素要被移除,哪些会被保留下来交由后面的处理函数来处理,如果不指定Evictor,窗口的所有元素都会提交到ProcessFunction中进行处理

4.ProcessFunction窗口处理函数处理收到的窗口元素(这些元素有可能已经经过了Evictor的过滤操作),进行计算并发送结果到下游算子,ReduceFuction,AggregateFunction都是常用的窗口处理函数

参考文献: https://blog.csdn.net/qq_37555071/article/details/122529271

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/170071.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【linux】基本指令(中篇)

echo指令 将引号内容打印到显示屏上 输出的重定向 追加的重定向 输出的重定向 我们学习c语言的时候当以写的方式创建一个文件&#xff0c;就会覆盖掉该文件之前的内容 当我们以追加的方式打开文件的时候&#xff0c;原文件内容不会被覆盖而是追加 more指令 10.more指令…

车载电子电器架构 ——电子电气架构设计方案概述

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 注:本文1万多字,认证码字,认真看!!! 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不对。非必要不费力证…

Vite CSS Module 优雅的处理样式隔离

今天介绍的是我写的一个vite插件vite-plugin-oneof-css-module&#xff0c;该插件主要处理scss module&#xff0c;那它适用于什么场景呢&#xff1f; 1. 最大的特点就是使用scss module 可以不用写 .module.scss 了 2. 可以根据不同的文件夹或文件分别进行不同的处理&#x…

基于Pytest+Requests+Allure实现接口自动化测试

一、整体结构 框架组成&#xff1a;pytestrequestsallure 设计模式&#xff1a; 关键字驱动 项目结构&#xff1a; 工具层&#xff1a;api_keyword/ 参数层&#xff1a;params/ 用例层&#xff1a;case/ 数据驱动&#xff1a;data_driver/ 数据层&#xff1a;data/ 逻…

AtCoder Beginner Contest 330 题解

目录 A - Counting PassesB - Minimize Abs 1C - Minimize Abs 2D - Counting LsE - Mex and Update A - Counting Passes 原题链接 题目描述 给定N个数和一个整数L&#xff0c;输出大于等于L的数的个数。 public static void solve() throws IOException{int n readInt(), m…

Blender快捷键总结

以下是一些Blender中常用的快捷键&#xff1a; 移动、旋转和缩放&#xff1a; G&#xff1a;移动选中的对象、顶点、边或面 R&#xff1a;旋转选中的对象、顶点、边或面 S&#xff1a;缩放选中的对象、顶点、边或面 Shift D&#xff1a;复制选中的对象 选择和编辑&#xff…

2311skia,01渲染架构

一,渲染层级 从渲染流程上分,Skia可分为如下三个层级: 1,指令层:SkPicture,SkDeferredCanvas->SkCanvas 这一层决定要绘图的操作,绘图操作的预变换矩阵,当前裁剪区域,在哪些层上绘图,层的生成与合并. 2,解析层:SkBitmapDevice->SkDraw->SkScan,SkDraw1Glyph::Proc 这…

基于51单片机的人体追踪可控的电风扇系统

**单片机设计介绍&#xff0c; 基于51单片机超声波测距汽车避障系统 文章目录 一 概要概述硬件组成工作原理优势应用场景总结 二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 # 基于51单片机的人体追踪可控的电风扇系统介绍 概述 该系统是基于51…

AI 视频 | Stable Video Diffusion 来了!(附体验地址)

1. 介绍 11 月 21 日&#xff0c;Stability AI 推出了 Stable Video Diffusion&#xff0c;这是 Stability AI 的第一个基于图像模型 Stable Diffusion 的生成式视频基础模型。 目前 Stability AI 已经在 GitHub 上开源了 Stable Video Diffusion 的代码&#xff0c;在 Huggin…

c语言刷题12周(1~5)

输入年月日&#xff0c;显示这一天是这一年的第几天&#xff0c;保证输入日期合法。 题干输入年月日&#xff0c;显示这一天是这一年的第几天&#xff0c;保证输入日期合法。输入样例2022 1 1 2022 12 31 2024 12 31 2022 4 5输出样例2022-1 2022-365 2024-366 2022-9…

【数据结构实验】图(二)将邻接矩阵存储转换为邻接表存储

文章目录 1. 引言2. 邻接表表示图的原理2.1 有向权图2.2 无向权图2.3 无向非权图2.1 有向非权图 3. 实验内容3.1 实验题目&#xff08;一&#xff09;数据结构要求&#xff08;二&#xff09;输入要求&#xff08;三&#xff09;输出要求 3.2 算法实现 4. 实验结果 1. 引言 图是…

node.js解决输出中文乱码问题

个人简介 &#x1f468;&#x1f3fb;‍&#x1f4bb;个人主页&#xff1a;九黎aj &#x1f3c3;&#x1f3fb;‍♂️幸福源自奋斗,平凡造就不凡 &#x1f31f;如果文章对你有用&#xff0c;麻烦关注点赞收藏走一波&#xff0c;感谢支持&#xff01; &#x1f331;欢迎订阅我的…

shell脚本循环语句

目录 一. 循环语句 1. 循环条件 2. 循环次数 3. 循环命令区别 4. for 循环 ①. 第一种语法 ②. 第二种语法 5. while 循环 6. until 循环 二. 跳出循环 1. break 结束循环 2. continue 结束循环 3. exit 结束循环 三. 补充 1. 偶数的表示 2. 奇数的表示 一. 循环…

TOGAF —体系结构治理

本章提供了架构治理的框架和指南。 3.1 引言 本部分介绍治理的性质和治理级别。 3.1.1 企业内部的治理级别 架构治理是管理企业架构和其他架构的实践和方向 并在企业范围内进行控制。 架构治理通常不是孤立地运作,而是在治理结构的层次结构中运作,其中, 特别是在大型企…

【测试开发工程师】TestNG测试框架零基础入门(上)

哈喽大家好&#xff0c;我是小浪。那么今天是一期基于JavaTestNG测试框架的入门教学的博客&#xff0c;从只会手工测试提升到自动化测试&#xff0c;这将对你的测试技术提升是非常大的&#xff0c;有助于我们以后在找工作、面试的时候具备更大的竞争力~ 文章目录 一、什么是T…

香港证监会再点名,三家“可疑虚拟资产平台交易平台”!

JPEX事件之后&#xff0c;香港证监会通过对可疑平台进行曝光&#xff0c;以提升虚拟资产交易平台牌照申请的透明性。最近&#xff0c;香港证监会于官网再点名三家“可疑虚拟资产平台交易平台”。截至目前&#xff0c;香港证监会在官网共点名9家可疑虚拟资产交易平台。 据了解&a…

【数据结构实验】图(一)Warshall算法(求解有向图的可达矩阵)

文章目录 1. 引言2. Warshall算法原理2.1 初始化可及矩阵2.2 迭代更新可及矩阵 3. 实验内容3.1 实验题目&#xff08;一&#xff09;输入要求&#xff08;二&#xff09;输出要求 3.2 算法实现 4. 实验结果 1. 引言 Warshall算法是一种用于求解有向图的可达矩阵的经典算法。该算…

一文带你深入理解MySQL的三大连接方式:左连接、右连接和内连接!

个人网站 本文首发于公众号小肖学数据分析 在MySQL中&#xff0c;常见的三种关联方式是左连接&#xff08;left join&#xff09;、右连接&#xff08;right join&#xff09;和内连接&#xff08;inner join&#xff09;。 本文我将详细介绍这三种关联方式&#xff0c;并提…

用Python进行数据分析:探索性数据分析的实践与技巧(文末送书)

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…

死锁是什么?死锁是如何产生的?如何破除死锁?

1. 死锁是什么 多个线程同时被阻塞&#xff0c;它们中的一个或者全部都在等待某个资源被释放。由于线程被无限期地阻塞&#xff0c;因此程序不可能正常终止。 2. 死锁的三种典型情况 一个线程, 一把锁, 是不可重入锁, 该线程针对这个锁连续加锁两次, 就会出现死锁. 两个线程…