当前位置: 首页 > news >正文

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

相关文章:

  • CANFD一次采样点和二次采样点
  • C#中警告CA1050、CA1821、CA1822、CA1859、CA2249及处理
  • 【hive】列转行—collect_set()/collect_list()/concat_ws()函数的使用场景
  • 2.多行输入【2023.11.24】
  • 【数据结构】二叉树概念 | 满二叉树 | 完全二叉树
  • redis的一些操作
  • Servlet+JSP小型超市管理系统
  • 卷积神经网络(CNN)识别验证码
  • 野指针详解
  • Oracle中文显示???????解决办法
  • 为什么 Flink 抛弃了 Scala
  • 2023年P气瓶充装证模拟考试题库及P气瓶充装理论考试试题
  • C++:一文读懂智能指针
  • js修改浏览器地址栏里url的方法
  • python -opencv 中值滤波 ,均值滤波,高斯滤波实战
  • (三)从jvm层面了解线程的启动和停止
  • 4个实用的微服务测试策略
  • Angular2开发踩坑系列-生产环境编译
  • Angular6错误 Service: No provider for Renderer2
  • co模块的前端实现
  • Effective Java 笔记(一)
  • hadoop入门学习教程--DKHadoop完整安装步骤
  • httpie使用详解
  • LeetCode刷题——29. Divide Two Integers(Part 1靠自己)
  • Quartz初级教程
  • thinkphp5.1 easywechat4 微信第三方开放平台
  • WebSocket使用
  • 阿里云容器服务区块链解决方案全新升级 支持Hyperledger Fabric v1.1
  • 看图轻松理解数据结构与算法系列(基于数组的栈)
  • 看域名解析域名安全对SEO的影响
  • 移动端解决方案学习记录
  • 用element的upload组件实现多图片上传和压缩
  • Nginx惊现漏洞 百万网站面临“拖库”风险
  • ​​​​​​​​​​​​​​Γ函数
  • ​ssh-keyscan命令--Linux命令应用大词典729个命令解读
  • ​二进制运算符:(与运算)、|(或运算)、~(取反运算)、^(异或运算)、位移运算符​
  • # 数据结构
  • (04)odoo视图操作
  • (Oracle)SQL优化技巧(一):分页查询
  • (SpringBoot)第二章:Spring创建和使用
  • (三)Honghu Cloud云架构一定时调度平台
  • (三)mysql_MYSQL(三)
  • (三)Pytorch快速搭建卷积神经网络模型实现手写数字识别(代码+详细注解)
  • (三)终结任务
  • (转)http协议
  • (转)PlayerPrefs在Windows下存到哪里去了?
  • .NET / MSBuild 扩展编译时什么时候用 BeforeTargets / AfterTargets 什么时候用 DependsOnTargets?
  • .NET 6 在已知拓扑路径的情况下使用 Dijkstra,A*算法搜索最短路径
  • .NET Core 将实体类转换为 SQL(ORM 映射)
  • .net 发送邮件
  • .NET 指南:抽象化实现的基类
  • .Net8 Blazor 尝鲜
  • .net经典笔试题
  • .NET框架
  • .vue文件怎么使用_我在项目中是这样配置Vue的