- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章彻底搞清 Flink 中的 Window 机制由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
在流处理应用中,数据是连续不断的,有时我们需要做一些聚合类的处理,例如:在过去的1分钟内有多少用户点击了我们的网页.
在这种情况下,我们必须定义一个窗口(window),用来收集最近1分钟内的数据,并对这个窗口内的数据进行计算 。
2.1 按照time和count分类 。
time-window:时间窗口:根据时间划分窗口,如:每xx分钟统计最近xx分钟的数据 。
count-window:数量窗口:根据数量划分窗口,如:每xx个数据统计最近xx个数据 。
2.2 按照slide和size分类 。
窗口有两个重要的属性: 窗口大小size和滑动间隔slide,根据它们的大小关系可分为
tumbling-window:滚动窗口:size=slide,如:每隔10s统计最近10s的数据 。
sliding-window:滑动窗口:size>slide,如:每隔5s统计最近10s数据 。
注意:当size 。
小结 。
按照上面窗口的分类方式进行组合,可以得出如下的窗口
注意:Flink还支持一个特殊的窗口:Session会话窗口,需要设置一个会话超时时间,如30s,则表示30s内没有数据到来,则触发上个窗口的计算 。
3.1 window和windowAll 。
使用keyby的流,应该使用window方法 。
未使用keyby的流,应该调用windowAll方法 。
区别:
Window算子:是可以设置并行度的 。
WindowAll 算子:并行度始终为1 。
3.2 WindowAssigner 。
Windows Assigner的作用是指定窗口的类型,定义如何将数据流分配到一个或者多个窗口,API中通过window (WindowsAssigner assigner)指定。在Flink中支持两种类型的窗口,一种是基于时间的窗口(TimeWindow),另一种是基于数量的窗口(countWindow)。窗口所表现出的类型特性取决于window assigner的定义.
Flink底层Window模型仅有TimeWindow以及GlobalWindow.
Flink提供了很多各种场景用的WindowAssigner:
如果需要自定制数据分发策略,则可以实现一个 class,继承自 WindowAssigner.
3.3 evictor 。
evictor 主要用于做一些数据的自定义操作,可以在执行用户代码之前,也可以在执行 。
用户代码之后,更详细的描述可以参考org.apache.flink.streaming.api.windowing.evictors.Evictor 的 evicBefore 和 evicAfter两个方法.
Flink 提供了如下三种通用的 evictor:
CountEvictor 保留指定数量的元素 。
TimeEvictor 设定一个阈值 interval,删除所有不再 max_ts - interval 范围内的元 。
素,其中 max_ts 是窗口内时间戳的最大值.
DeltaEvictor 通过执行用户给定的 DeltaFunction 以及预设的 theshold,判断是否删 除一个元素.
3.4 trigger 。
trigger 用来判断一个窗口是否需要被触发,每个 WindowAssigner 都自带一个默认的trigger, 。
如果默认的 trigger 不能满足你的需求,则可以自定义一个类,继承自Trigger 即可,我们详细描述下 Trigger 的接口以及含义:
onEventTime() 当 event-time timer 被触发的时候会调用 。
onElement() 每次往 window 增加一个元素的时候都会触发 。
onMerge() 对两个 `rigger 的 state 进行 merge 操作 。
clear() window 销毁的时候被调用 。
上面的接口中前三个会返回一个 TriggerResult, TriggerResult 有如下几种可能的选 择:
4.1 基于时间的滚动和滑动窗口 。
测试数据 。
需求1:每5秒钟统计一次,最近5秒钟内,各个路口通过红绿灯汽车的数量--基于时间的滚动窗口 。
需求2:每5秒钟统计一次,最近10秒钟内,各个路口通过红绿灯汽车的数量--基于时间的滑动窗口 。
4.2 基于数量的滚动和滑动窗口 。
测试数据 。
需求1:统计在最近5条消息中,各自路口通过的汽车数量,相同的key每出现5次进行统计--基于数量的滚动窗口 。
需求2:统计在最近5条消息中,各自路口通过的汽车数量,相同的key每出现3次进行统计--基于数量的滑动窗口 。
case class CartInfo(var sensorId: String, var count: Int) 。
4.3 会话窗口 。
测试数据 。
设置会话超时时间为10s,10s内没有数据到来,则触发上个窗口的计算 。
原文链接:https://mp.weixin.qq.com/s/GPIcjPQUT1xAKAG6fBmvtg 。
最后此篇关于彻底搞清 Flink 中的 Window 机制的文章就讲到这里了,如果你想了解更多关于彻底搞清 Flink 中的 Window 机制的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
1.概述 转载:Flink 源码阅读笔记(15)- Flink SQL 整体执行框架 在数据处理领域,无论是实时数据处理还是离线数据处理,使用 SQL 简化开发将会是未来的整体发展趋势。尽管 SQL
1.概述 转载:Flink 源码阅读笔记(6)- 计算资源管理 在 Flink 中,计算资源的是以 Slot 作为基本单位进行分配的。本文将对 Flink 中计算资源的管理机制加以分析。 2.Task
1.概述 转载:Flink jvm参数配置GC日志 生产环境上,或者其他要测试 GC 问题的环境上,一定会配置上打印GC日志的参数,便于分析 GC 相关的问题。 但是可能很多人配置的都不够“完美”,要
1.概述 转载:Flink 源码阅读笔记(20)- Flink 基于 Mailbox 的线程模型 相似文章:【Flink】Flink 基于 MailBox 实现的 StreamTask 线程模型 Fl
1.概述 转载:Flink SQL代码生成与UDF重复调用的优化 2. 代码生成简介 代码生成(code generation)是当今各种数据库和数据处理引擎广泛采用的物理执行层技术之一。通过代码生成
1.概述 转载:面向流批一体的 Flink Runtime 新进展 首先是关于调度部分的性能优化。Flink 由于存在 all to all 的连接关系,两个并发为 n 的算子之间会有 n² 条边,这
在Fink源码中,有flink-stream-java和flink-stream-scala模块。 flink streaming 为什么需要两个模块? https://github.com/apac
我的要求是在一天内流式传输数百万条记录,并且它对外部配置参数有很大的依赖性。例如,用户可以随时在 Web 应用程序中更改所需的设置,并且在进行更改后,必须使用新的应用程序配置参数进行流式传输。这些是应
我开发了一个 Flink 作业并使用 Apache Flink 仪表板提交了我的作业。根据我的理解,当我提交作业时,我的 jar 应该在 Flink 服务器上可用。我试图找出我的 jar 的路径,但无
我开发了一个 Flink 作业并使用 Apache Flink 仪表板提交了我的作业。根据我的理解,当我提交作业时,我的 jar 应该在 Flink 服务器上可用。我试图找出我的 jar 的路径,但无
1.概述 转载:Flink 源码阅读笔记(4)- RPC 相关文章: 【Flink】Flink 源码之RPC调用 Flink】FLink 通讯组件 RPC 作为一个分布式系统,Flink 内部不同组件
1.概述 转载并且补充: flink keyby 分布不均匀问题 我使用随机数random.nextint(8)作为key,生成keyedstream之后,直接sink到存储中,但是sink算子只有四
1.概述 转载:Flink Sort-Shuffle写流程简析 转载并且补充。 2.配置 taskmanager.network.sort-shuffle.min-parallelism 核心配置。设
1.概述 转载:Flink源码分析——批处理模式Map端数据聚合 在flink的批处理模式下,数据的计算也有着map/reduce两端的计算模型,这一点和MR、spark计算框架是类似的。在数据进行分
1.概述 转载:Flink on yarn 远程调试 大家好,我是 JasonLee。 前几天有小伙伴问我,我写的 Flink 代码是提交到 yarn 上去运行的,那我怎么能远程调试代码呢?在本地调试
当我使用 flink 事件时间窗口时,窗口就是不触发。请问如何解决,有什么debug的方法吗? 最佳答案 由于您使用的是事件时间窗口,所以很可能是水印问题。该窗口仅在水印取得进展时输出。事件时间没有提
我有一个用例,我想在 Flink 上运行 2 个独立的处理流程。所以 2 个流程看起来像 Source1 -> operator1 -> Sink1 Source2 -> operator2 -> S
我们正在尝试构建一个用例,其中来自流的数据通过计算公式运行,但公式本身也应该(很少)是可更新的。通过阅读文档,在我看来,Flink 广播状态很适合这种情况。 作为实验,我构建了一个简化版本:假设我有一
我有一个 Flink Streaming 作业,它失败了,我得到如下日志。谁能告诉我如何解决这个问题?有时运行一天就失效,有时运行几个小时就失效。 09:30:25 948 INFO (org.ap
我们正在将 spark 作业迁移到 flink。我们在 spark 中使用了 pre-shuffle 聚合。有没有办法在 spark.xml 中执行类似的操作?我们正在使用来自 apache kafk
我是一名优秀的程序员,十分优秀!