滚动监听_Flink实战之滚动窗口、滑动窗口WindowsAPI使用示例

Flink实战之窗口WindowsAPI使用示例

介绍

Fink的时间窗口(Window)可以分成两类:

1、CountWindow:按照指定的数据条数生成一个 Window,与时间无关。

2、TimeWindow:按照时间生成 Window。

TimeWindow,可以根据窗口实现原理的不同分成三类:滚动窗口(Tumbling

Window)、滑动窗口(Sliding Window)和会话窗口(Session Window)。

本文介绍滚动窗口(TumblingWindow)、滑动窗口(Sliding Window),并通过例子说明如何使用这些窗口。

接下来文章介绍CountWindow窗口,欢迎关注。

滚动窗口(Tumbling Windows)使用例子

滚动窗口是将数据依据固定的窗口长度对数据进行切片,特点是时间对齐,窗口长度固定,没有重叠。

滚动窗口分配器将每个元素分配到一个指定窗口大小的窗口中,如:如果你指定了一个 15 分钟大小的滚动窗口。

窗口的创建如下图所示:

滚动监听_Flink实战之滚动窗口、滑动窗口WindowsAPI使用示例_第1张图片

示例说明:

进行分组聚合(keyBy:将key相同的分到一个组中) ,定义一个1分钟的翻滚窗口,每分钟统计一次单词出现的次数

示例代码如下:

 // 创建流处理的执行环境        StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();        //2.使用StreamExecutionEnvironment创建DataStream        //Source(可以有多个Source)        //Socket 监听本地端口8888        // 接收一个socket文本流        DataStreamSource lines = env.socketTextStream("localhost", 8888);        // Transformation(s) 对数据进行转换处理统计,先分词,再按照word进行分组,最后进行聚合统计        DataStreamString, Integer>> windowCount = lines.flatMap(            public void flatMap(String line, CollectorString, Integer>> collector) throws Exception {                String[] words = line.split(" ");                for (String word : words) {                    //将每个单词与 1 组合,形成一个元组                    Tuple2 tp = Tuple2.of(word, 1);                    //将组成的Tuple放入到 Collector 集合,并输出                    collector.collect(tp);                }            }        });        // 1. 滚动窗口(Tumbling Windows)使用例子        //进行分组聚合(keyBy:将key相同的分到一个组中) //定义一个1分钟的翻滚窗口,每分钟统计一次        DataStreamString, Integer>> windowStream = windowCount.keyBy(               .timeWindow(Time.minutes(1))                .sum(1);        // 调用Sink (Sink必须调用)        windowStream.print("windows: ").setParallelism(1);        //timePoint+=30;        //启动(这个异常不建议try...catch... 捕获,因为它会抛给上层flink,flink根据异常来做相应的重启策略等处理)        env.execute("StreamWordCount");

在终端通过命令nc -lk 8888 输入一些数据

第一分钟输入

hello world
hello flink

第二分钟输入

hello spark

查看一下效果

滚动监听_Flink实战之滚动窗口、滑动窗口WindowsAPI使用示例_第2张图片

滑动窗口(Sliding Windows)使用例子

滑动窗口是固定窗口的更广义的一种形式,滑动窗口由固定的窗口长度和滑动间隔组成。

特点:时间对齐,窗口长度固定,有重叠。

滚动监听_Flink实战之滚动窗口、滑动窗口WindowsAPI使用示例_第3张图片

示例说明:

进行分组聚合(keyBy:将key相同的分到一个组中) ,定义1分钟的滑动窗口,每30秒滑动一次统计一次单词出现的次数

注:1分钟的窗口和30秒的滑动,30秒滑动幅度是包含前后30秒的输入数据,即1分钟产生的数据。

示例代码如下:

其它代码与上面滚动窗口一样

   DataStream>> sumed = windowCount.keyBy(                .timeWindow(Time.minutes(1), Time.seconds(30))                .sum(1);

在终端通过命令nc -lk 8888 输入一些数据

第一30秒内输入

hello world
hello flink

第二30秒内输入

hello spark

查看一下效果

滚动监听_Flink实战之滚动窗口、滑动窗口WindowsAPI使用示例_第4张图片

如果觉得文章能帮到您,欢迎关注微信公众号:大数据技术天涯,共同进步!

持续分享java微服务技术,大数据、人工智能等科技类原创文章。

滚动监听_Flink实战之滚动窗口、滑动窗口WindowsAPI使用示例_第5张图片

你可能感兴趣的:(滚动监听)