Flink窗口原理详解

Flink原理:窗口原理详解

1 定义

​ Flink 认为 Batch 是 Streaming 的一个特例,所以 Flink 底层引擎是一个流式引擎,在上面实现了流处理和批处理。而窗口(window)就是从 Streaming 到 Batch 的一个桥梁,将无界数据划分成有界数据。我们通过定义一个窗口,收集一批数据,并对这个窗口内的数据进行聚合类的计算。

在这里插入图片描述

2 窗口分类

2.1 Time Window

Flink 中窗口机制和时间类型是完全解耦的,也就是说当需要改变时间类型时不需要更改窗口逻辑相关的代码。

2.1.1 Flink中的时间种类有哪些

​ Flink中的时间与现实世界中的时间是不一致的,在flink中被划分为事件时间,摄入时间,处理时间三种。

​ 如果以EventTime为基准来定义时间窗口将形成EventTimeWindow,要求消息本身就应该携带EventTime

​ 如果以IngesingtTime为基准来定义时间窗口将形成IngestingTimeWindow,以source的systemTime为准。

​ 如果以ProcessingTime基准来定义时间窗口将形成ProcessingTimeWindow,以operator的systemTime为准。

2.1.2 Tumbling Time Window

​ 翻滚窗口能将数据流切分成不重叠的窗口,每一个事件只能属于一个窗口。通过使用 DataStream API,我们可以这样实现:

socketDataStream.keyBy(0).timeWindow(Time.minutes(2));
2.1.3 Sliding Time Window

​ 对于某些应用,它们需要的窗口是不间断的,需要平滑地进行窗口聚合。比如,我们可以每30秒计算一次最近一分钟用户购买的商品总数。这种窗口我们称为滑动时间窗口(Sliding Time Window)。在滑窗中,一个元素可以对应多个窗口。通过使用 DataStream API,我们可以这样实现:

socketDataStream.keyBy(0).timeWindow(Time.minutes(1), Time.seconds(30));

2.2 Count Window

​ Count Window 是根据元素个数对数据流进行分组的。

2.2.1 Tumbling Count Window

​ 当我们想要每100个用户购买行为事件统计购买总数,那么每当窗口中填满100个元素了,就会对窗口进行计算,这种窗口我们称之为翻滚计数窗口(Tumbling Count Window)

socketDataStream.keyBy(0).co
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Flink是一个流式处理框架,窗口函数是其核心功能之一,用于对数据流进行分组和聚合操作。窗口函数可以将无限的数据流划分为有限大小的窗口,并在每个窗口上执行计算操作。 Flink提供了多种类型的窗口函数,包括滚动窗口、滑动窗口和会话窗口。下面是对这些窗口函数的介绍: 1. 滚动窗口(Tumbling Window):滚动窗口将数据流划分为固定大小的、不重叠的窗口。每个窗口都包含固定数量的元素,并且每个元素只属于一个窗口。滚动窗口适用于对数据流进行离散化处理,例如按小时、按天或按月进行统计。 2. 滑动窗口(Sliding Window):滑动窗口将数据流划分为固定大小的、可能重叠的窗口。与滚动窗口不同,滑动窗口中的元素可以属于多个窗口。滑动窗口适用于需要考虑数据流中相邻元素之间关系的计算,例如计算最近一小时内的平均值。 3. 会话窗口(Session Window):会话窗口根据数据流中的活动时间间隔来划分窗口。当数据流中的元素之间的时间间隔超过指定的阈值时,会话窗口会关闭并输出结果。会话窗口适用于处理具有不确定时间间隔的事件流,例如用户在网站上的访问记录。 在Flink中,可以使用窗口函数对窗口中的数据进行聚合操作,例如求和、计数、平均值等。窗口函数可以通过自定义函数或使用预定义的聚合函数来实现。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

野狼e族

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值