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

Flink Window 窗口【更新中】

Flink Window 窗口

在Flink流式计算中,最重要的转换就是窗口转换Window,在DataStream转换图中,可以发现处处都可以对DataStream进行窗口Window计算。
在这里插入图片描述窗口(window)就是从 Streaming 到 Batch 的一个桥梁。窗口将无界流(unbounded data stream)划分很多有界流(bounded stream),对无界流进行计算。

在这里插入图片描述
在实际业务需求中,往往说窗口,指的就是基于时间Time窗口,比如最近1分钟内数据,指的就是1分钟时间内产生的数据,放在窗口中

Flink Window 窗口的结构中,有两个必须的两个操作:

  • 第一、窗口分配器(Window Assigner):将数据流中的元素分配到对应的窗口。
  • 第二、窗口函数(Window Function):当满足窗口触发条件后,对窗口内的数据使用窗口处理函数(Window Function)进行处理,常用的有reduce、aggregate、process
  • 其他的triggerevictor则是窗口的触发和销毁过程中的附加选项,主要面向需要更多自定义的高级编程者,如果不设置则会使用默认的配置。
    在这里插入图片描述
  • 上图是窗口的生命周期示意图,假如设置的是一个10分钟的滚动窗口,第一个窗口的起始时间是0:00,结束时间是0:10,后面以此类推。
  • 当数据流中的元素流入后,窗口分配器会根据时间(Event Time或Processing Time)分配给相应的窗口。相应窗口满足了触发条件,比如已经到了窗口的结束时间,会触发相应的Window Function进行计算

在Flink计算引擎中,支持窗口类型有很多种,几乎所有Streaming流式计算引擎需要实现窗口都支持。

在这里插入图片描述

  • 1)、时间窗口TimeWindow

    • 按照时间间隔划分出窗口,并对窗口中数据进行计,如每xx分钟统计,最近xx分钟的数据
    • 划分为:**滚动(Tumbling)窗口和滑动(Sliding)**窗口
  • 2)、计数窗口CountWindow

    • 按照数据条目数进行设置窗口,比如每10条数据统计一次
    • 划分为:**滚动(Tumbling)窗口和滑动(Sliding)**窗口
    • [此种方式窗口计算,在实际项目中使用不多,但是有些特殊业务需要,需要使用此场景。]
      在这里插入图片描述
package com.lyj.sx.flink.day05;import org.apache.flink.configuration.Configuration;
import org.apache.flink.streaming.api.datastream.AllWindowedStream;
import org.apache.flink.streaming.api.datastream.DataStreamSource;
import org.apache.flink.streaming.api.datastream.SingleOutputStreamOperator;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
import org.apache.flink.streaming.api.windowing.windows.GlobalWindow;public class CountWindowAllDemo {public static void main(String[] args) throws Exception {StreamExecutionEnvironment env = StreamExecutionEnvironment.createLocalEnvironmentWithWebUI(new Configuration());DataStreamSource<String> source = env.socketTextStream("192.168.25.62", 8889);SingleOutputStreamOperator<Integer> map = source.map(Integer::parseInt);//不keyBy,直接划分窗口//窗口内的数据达到5条,就生成一个窗口,然后对窗口内的数据进行计算AllWindowedStream<Integer, GlobalWindow> win = map.countWindowAll(5);SingleOutputStreamOperator<Integer> sum = win.sum(0);sum.print();env.execute("pxj");}
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • cleanshot Mac 上的截图工具
  • Linux——删除账号,账户切换,控制用户对系统命令的使用权限,配置/etc/sudoers文件方式
  • 1.29、基于浅层神经网络的数据拟合(matlab)
  • Mysql表的三范式、事务和查询
  • 远程访问及控制(ssh)
  • 网关设备BL122实现Modbus RTU/TCP转Profinet协议
  • 深入Python网络编程:基础、工具和实践
  • Vue3渐变文字(GradientText)
  • 浅写:vs-select的传参方法,传递一整行参数,而不是单个
  • 《云原生安全攻防》-- 容器攻击案例:Docker容器逃逸
  • Git进阶(十四):Windows下 git 提示 Repository not found
  • 如何评估AI模型:评估指标的分类、方法及案例解析
  • JMeter进行HTTP接口测试的技术要点
  • C语言 | Leetcode C语言题解之第236题二叉树的最近公共祖先
  • Pycharm与Gitlab交互
  • (三)从jvm层面了解线程的启动和停止
  • JSONP原理
  • Koa2 之文件上传下载
  • pdf文件如何在线转换为jpg图片
  • Python_OOP
  • Rancher-k8s加速安装文档
  • SegmentFault 2015 Top Rank
  • 飞驰在Mesos的涡轮引擎上
  • 机器学习 vs. 深度学习
  • 你真的知道 == 和 equals 的区别吗?
  • 让你的分享飞起来——极光推出社会化分享组件
  • 实习面试笔记
  • 实战|智能家居行业移动应用性能分析
  • 收藏好这篇,别再只说“数据劫持”了
  • 译有关态射的一切
  • 用mpvue开发微信小程序
  • 运行时添加log4j2的appender
  • 中国人寿如何基于容器搭建金融PaaS云平台
  • Nginx惊现漏洞 百万网站面临“拖库”风险
  • 我们雇佣了一只大猴子...
  • ​3ds Max插件CG MAGIC图形板块为您提升线条效率!
  • #经典论文 异质山坡的物理模型 2 有效导水率
  • $nextTick的使用场景介绍
  • (4)事件处理——(7)简单事件(Simple events)
  • (C语言)逆序输出字符串
  • (js)循环条件满足时终止循环
  • (k8s中)docker netty OOM问题记录
  • (独孤九剑)--文件系统
  • (二)Pytorch快速搭建神经网络模型实现气温预测回归(代码+详细注解)
  • (二)换源+apt-get基础配置+搜狗拼音
  • (附源码)ssm航空客运订票系统 毕业设计 141612
  • (附源码)ssm失物招领系统 毕业设计 182317
  • (附源码)计算机毕业设计SSM保险客户管理系统
  • (附源码)计算机毕业设计ssm基于B_S的汽车售后服务管理系统
  • (附源码)计算机毕业设计SSM疫情社区管理系统
  • (附源码)计算机毕业设计SSM智慧停车系统
  • (九)信息融合方式简介
  • (免费领源码)Java#ssm#MySQL 创意商城03663-计算机毕业设计项目选题推荐
  • (强烈推荐)移动端音视频从零到上手(上)
  • (十八)用JAVA编写MP3解码器——迷你播放器