Flink Window 和 Time、Watermarks 详解

本文详细介绍了Flink中的Window概念,包括Time Window和Count Window的应用,以及Window的聚合类型。重点讨论了Event Time、Processing Time和Ingestion Time,并解释了Watermarks在处理乱序数据中的作用,以及如何处理延迟数据。此外,还提到了如何设置和生成Watermarks。
摘要由CSDN通过智能技术生成

Window

  • 聚合事件 (比如 计数、求和)在流上的工作方式与批处理不同
  1. 比如,对流中的所有元素进行计数是不可能的,因为通常流量是无限的。所以,流上的聚合需要由window来划定范围,比如“计算过去的5分钟”,或者“最后的100各元素的和”
  2. window 是一种可以把无限数据切割为有限数据块的手段
  • 窗口可以是事件驱动的【Time Window】 比如:每30秒 或者数据驱动的【Count Window】 比如 :每100个元素

Window的类型

  • tumbling windows:滚动窗口【没有重叠】

每个window 窗口大小是相等的

  • sliding windows:滑动窗口【有重叠】

  • session windows: 会话窗口

window类型汇总

TimeWindow的应用

.timeWindow(Time.seconds(2),Time.seconds(1)) // 滑动窗口  每个1秒 统计 2秒内的数据
.timeWindow(Time.seconds(2))  // 滚动窗口 统计2秒内的数据

CountWindow的应用

.countWindow(100)  // 滚动窗口 对每隔100个元素 计算一次

.countWindow(100,10) // 滑动窗口  每隔10个元素 统计 最近100个元素

Window 聚合分类之增量聚合

  • 增量聚合
  1. 窗口中每进入一条数据,就进行一次计算
  2. reduce(reduceFunction)
  3. aggregate(aggregateFunction)
  4. sum(),min(),max()

Window 聚合分类之全量聚合

  • 全量聚合
  1. 等属于窗口的数据到齐,才开始进行聚合计算【可以实现对窗口内的数据进行排序等需求】
  2. apply(windowFunction)
  3. process(processWindowFunction)
  • processWindowFunction比windowFunction提供了更多的上下文信息

 

package com.im.flink.task.Streaming;

import org.apache.flink.api.common.functions.MapFunction;
import org.apache.flink.api.java.tuple.Tuple;
import org.apache.flink.api.java.tuple.Tuple2;
import org.apache.flink.streaming.api.datastream.DataStream;
import org.apache.flink.streaming.api.datastream.DataStreamSource;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
import org.apache.flink.streaming.api.functions.windowing.ProcessWindowFunction;
import org.apache.flink.streaming.api.windowing.time.Time;
import org.apache.flink.streaming.api.windowing.windows.TimeWindow;
import org.apache.flink.util.Collector;

import java.util.ArrayList;

/**
 * describe:
 *
 * @author lm
 * @date 20
  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值