热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Flink1.10中Window窗口机制简介

本篇文章为大家展示了Flink1.10中Window窗口机制简介,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。一

本篇文章为大家展示了Flink1.10中Window窗口机制简介,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

一、Window概念

Flink1.10中Window窗口机制简介

   

    上面是Flink1.10的官方文档的一句话,翻译了一下大体意思是:Window是处理无限数据流的核心,Windows将流分割为有限大小的“buckets”,我们可以在上面应用计算。

   Flink认为批处理是流处理的一种非常特殊的情况。在流处理中,我们为数据定义滑动窗口或滚动窗口,并且在每次窗口滑动或滚动时生成结果。批处理则不同,我们定义一个全局窗口,所有的记录都属于同一个窗口;Flink 底层引擎是一个流式引擎,在上面实现了流处理和批处理。而窗口(window)就是从 Streaming 到 Batch 的一个桥梁。

二、Window分类

 

1.keyed streams和non-keyed streams

   Flink程序在窗口计算之前,先对数据做分流,有两种控制流的方式:第一种是keyed streams;第二种non-keyed streams;

Flink1.10中Window窗口机制简介

    由上图可知,对于keyed streams调用的是keyBy和window,先对数据流根据key进行了分组,经过keyBy的数据流将形成多组数据,下游的算子的多个实例可以并行计算,而non-keyed streams调用的是windowAll,不会对数据流进行分组,所有的数据将发送到下游的单个实例进行处理。两种控制流的原理基本类似,唯一的区别就是发送给下游的多个或单个算子进行计算。

2.Window Assinger

    数据经过控制流的处理之后,两种控制流都需要指定一个window Assinger,负责将每个传入的元素分配给一个或多个窗口,有了window Assinger,才会创建出各种形式的window来覆盖我们所需的各种场景,对我们开发来说不需要关注window本身,只需要关注Window Assinger的分类即可,所以很多关于Flink的视频都没有讲解控制流的概念,只讲了Window的分类。

3.Window Assinger分类

    Flink为最常见的用例(即滚动窗口、滑动窗口、会话窗口和全局窗口)提供了预定义的Window Assinger程序。您还可以通过扩展Window Assigner类来实现自定义窗口assigner。所有内置的窗口分配程序(全局窗口除外)都根据时间将元素分配给窗口,时间可以是处理时间,也可以是事件时间。

    Window 可以是基于时间驱动的(Time Window,例如:每60秒钟),也可以是基于数据驱动的(Count Window,例如:每200个元素)。同时基于不同事件驱动的窗口又可以分成以下几类:滚动窗口 (Tumbling Window, 无重叠)、滑动窗口 (Sliding Window, 有重叠)、会话窗口 (Session Window, 活动间隙)、全局窗口。下面我就结合ApacheFlink官网文档给大家讲解下这四种窗口。

3.1 Tumbling Window(滚动窗口)

    滚动窗口将每个元素分配给指定窗口大小的窗口。滚动窗口有一个固定的大小且元素不重叠。例如,如果您指定了一个大小为5分钟的滚动窗口,那么将计算当前窗口并每5分钟启动一个新窗口,如下图所示。

Flink1.10中Window窗口机制简介

3.2 Sliding Windows(滑动窗口)

    滑动窗口分配程序将元素分配给固定长度的窗口。类似于滚动窗口分配程序,窗口的大小由窗口大小参数配置。一个附加的窗口滑动参数控制滑动窗口启动的频率。因此,如果滑动窗口比窗口大小要小,则滑动窗口可以重叠。在这种情况下,元素被分配给多个窗口。例如,您可以有10分钟大小的窗口,它可以滑动5分钟。这样,您每5分钟就会得到一个包含最近10分钟内到达的事件的窗口,如下图所示。

Flink1.10中Window窗口机制简介

3.3 Session Windows(会话窗口)

    会话窗口分配程序根据活动的会话对元素进行分组。与滚动窗口和滑动窗口相比,会话窗口没有重叠,也没有固定的开始和结束时间。相反,当某个会话窗口在一段时间内没有接收到元素时,它就会关闭。当一个不活跃的间隙出现时。会话窗口分配程序可以配置为静态会话间隔,也可以配置为会话间隔提取器函数,该函数定义了不活动期间的长度。当此期间过期时,当前会话将关闭,随后的元素将分配给新会话窗口,如下图所示:

Flink1.10中Window窗口机制简介

3.4 Global Windows(全局窗口)

    全局窗口分配程序将具有相同键的所有元素分配给同一个全局窗口。此窗口模式仅在您还指定自定义触发器时才有用。否则,将不执行任何计算,因为全局窗口没有一个可以处理聚合元素的自然末端,所有相同keyed的元素分配到一个窗口里,这种窗口很少使用,如下图所示:

Flink1.10中Window窗口机制简介

    至此,Flink的Window机制的一些概念介绍完毕。

上述内容就是Flink1.10中Window窗口机制简介,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注编程笔记行业资讯频道。


推荐阅读
  • 两种方式实现Flink异步IO查询Mysql
    如官网所描述的Flink支持两种方式实现异步IO查询外部系统http ... [详细]
  • 本文详细解析了使用C++实现的键盘输入记录程序的源代码,该程序在Windows应用程序开发中具有很高的实用价值。键盘记录功能不仅在远程控制软件中广泛应用,还为开发者提供了强大的调试和监控工具。通过具体实例,本文深入探讨了C++键盘记录程序的设计与实现,适合需要相关技术的开发者参考。 ... [详细]
  • 以Flink为例,消除流处理常见的六大谬见
    以Flink为例,消除流处理常见的六大谬见 ... [详细]
  • 在PHP中如何正确调用JavaScript变量及定义PHP变量的方法详解 ... [详细]
  • DVWA学习笔记系列:深入理解CSRF攻击机制
    DVWA学习笔记系列:深入理解CSRF攻击机制 ... [详细]
  • V8不仅是一款著名的八缸发动机,广泛应用于道奇Charger、宾利Continental GT和BossHoss摩托车中。自2008年以来,作为Chromium项目的一部分,V8 JavaScript引擎在性能优化和技术创新方面取得了显著进展。该引擎通过先进的编译技术和高效的垃圾回收机制,显著提升了JavaScript的执行效率,为现代Web应用提供了强大的支持。持续的优化和创新使得V8在处理复杂计算和大规模数据时表现更加出色,成为众多开发者和企业的首选。 ... [详细]
  • 本文探讨了如何利用Java代码获取当前本地操作系统中正在运行的进程列表及其详细信息。通过引入必要的包和类,开发者可以轻松地实现这一功能,为系统监控和管理提供有力支持。示例代码展示了具体实现方法,适用于需要了解系统进程状态的开发人员。 ... [详细]
  • Java能否直接通过HTTP将字节流绕过HEAP写入SD卡? ... [详细]
  • 在探讨Hibernate框架的高级特性时,缓存机制和懒加载策略是提升数据操作效率的关键要素。缓存策略能够显著减少数据库访问次数,从而提高应用性能,特别是在处理频繁访问的数据时。Hibernate提供了多层次的缓存支持,包括一级缓存和二级缓存,以满足不同场景下的需求。懒加载策略则通过按需加载关联对象,进一步优化了资源利用和响应时间。本文将深入分析这些机制的实现原理及其最佳实践。 ... [详细]
  • PHP自学必备:从零开始的准备工作与工具选择 ... [详细]
  • 本文详细介绍了使用 Python 进行 MySQL 和 Redis 数据库操作的实战技巧。首先,针对 MySQL 数据库,通过 `pymysql` 模块展示了如何连接和操作数据库,包括建立连接、执行查询和更新等常见操作。接着,文章深入探讨了 Redis 的基本命令和高级功能,如键值存储、列表操作和事务处理。此外,还提供了多个实际案例,帮助读者更好地理解和应用这些技术。 ... [详细]
  • JavaScript XML操作实用工具类:XmlUtilsJS技巧与应用 ... [详细]
  • 本文详细介绍了如何在Java Web服务器上部署音视频服务,并提供了完整的验证流程。以AnyChat为例,这是一款跨平台的音视频解决方案,广泛应用于需要实时音视频交互的项目中。通过具体的部署步骤和测试方法,确保了音视频服务的稳定性和可靠性。 ... [详细]
  • 第二章:Kafka基础入门与核心概念解析
    本章节主要介绍了Kafka的基本概念及其核心特性。Kafka是一种分布式消息发布和订阅系统,以其卓越的性能和高吞吐量而著称。最初,Kafka被设计用于LinkedIn的活动流和运营数据处理,旨在高效地管理和传输大规模的数据流。这些数据主要包括用户活动记录、系统日志和其他实时信息。通过深入解析Kafka的设计原理和应用场景,读者将能够更好地理解其在现代大数据架构中的重要地位。 ... [详细]
  • 在 Angular Google Maps 中实现图片嵌入信息窗口的功能,可以通过使用 `@agm/core` 库来实现。该库提供了丰富的 API 和组件,使得开发者可以轻松地在地图上的信息窗口中嵌入图片。本文将详细介绍如何配置和使用这些组件,以实现动态加载和显示图片的功能。此外,还将探讨一些常见的问题和解决方案,帮助开发者更好地集成这一功能。 ... [详细]
author-avatar
子新宥梅93
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有