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。
  • 其他的trigger 、evictor 则是窗口的触发和销毁过程中的附加选项,主要面向需要更多自定义的高级编程者,如果不设置则会使用默认的配置。
  • 上图是窗口的生命周期示意图 ,假如设置的是一个10分钟的滚动窗口,第一个窗口的起始时间是0:00,结束时间是0:10,后面以此类推。
  • 当数据流中的元素流入后,窗口分配器会根据时间(Event Time或Processing Time)分配给相应的窗口。相应窗口满足了触发条件,比如已经到了窗口的结束时间,会触发相应的Window Function进行计算。

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

  • 1)、时间窗口TimeWindow

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

    • 按照数据条目数进行设置窗口,比如每10条数据统计一次
    • 划分为:**滚动(Tumbling)窗口和滑动(Sliding)**窗口
    • 此种方式窗口计算,在实际项目中使用不多,但是有些特殊业务需要,需要使用此场景。

java 复制代码
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");


    }
}
相关推荐
宸津-代码粉碎机6 小时前
OpenAI 连夜迎战 Grok Bot 和 Muse:AI 智能体从 “会聊天” 到 “能办事”,现在入场还来得及吗
java·大数据·人工智能·分布式·python
Leo.yuan7 小时前
2026年本地化Data Agent优质厂商盘点:哪些产品更适合企业生产环境
大数据·数据库·人工智能
云上先途8 小时前
任务智能体可以自动完成哪些类型工作,是不是只能做简单重复操作?
大数据·人工智能
小蒋观天下8 小时前
两轮车检测AI摄像头——2026行业竞争格局、商业模式与核心痛点
大数据·人工智能·安全·计算机视觉·ai大模型
RisunJan8 小时前
【这就是AI】AI每日资讯简报 - 2026-09-28(周一)
大数据·人工智能
圆圆讲门店9 小时前
挑选同城获客服务机构时需要考量的核心因素都有哪些?
大数据·网络·人工智能·python
小蒋观天下9 小时前
两轮车检测AI摄像头——2026-2030年未来市场规模、增长逻辑与行业天花板
大数据·人工智能·安全·计算机视觉·ai大模型
pusheng202510 小时前
马年市场快报 | 阿尔及利亚政府推进2200万台家用CO报警器安装计划
大数据·人工智能
2601_9657422210 小时前
布局GEO AI本地营销,我重点看这几个细节
大数据·人工智能·算法·ai·新媒体运营
灰山君10 小时前
山海鲸可视化对比DataEase:企业数据可视化的两种路径
大数据·信息可视化·数据分析·数字孪生·3d模型