38、Flink 的 WindowAssigner 之 GlobalWindows 示例

1、注意

使用 GlobalWindows 需要自定义 Trigger,否则窗口中的数据不会被计算。

2、代码示例

bash 复制代码
import org.apache.flink.streaming.api.datastream.DataStreamSource;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
import org.apache.flink.streaming.api.functions.windowing.WindowFunction;
import org.apache.flink.streaming.api.windowing.assigners.GlobalWindows;
import org.apache.flink.streaming.api.windowing.triggers.Trigger;
import org.apache.flink.streaming.api.windowing.triggers.TriggerResult;
import org.apache.flink.streaming.api.windowing.windows.GlobalWindow;
import org.apache.flink.util.Collector;

public class _05_WindowAssignerGlobal {
    public static void main(String[] args) throws Exception {
        StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();

        DataStreamSource<String> input = env.socketTextStream("localhost", 8888);

        // 此窗口模式仅在指定了自定义的 trigger 时有用,否则计算不会发生,因为全局窗口没有天然的终点去触发其中积累的数据
        input
                .keyBy(e -> e)
                // 多并行 Task
                .window(GlobalWindows.create())
                .trigger(new Trigger<String, GlobalWindow>() {
                    @Override
                    public TriggerResult onElement(String s, long l, GlobalWindow globalWindow, TriggerContext triggerContext) throws Exception {
                        return null;
                    }

                    @Override
                    public TriggerResult onProcessingTime(long l, GlobalWindow globalWindow, TriggerContext triggerContext) throws Exception {
                        return null;
                    }

                    @Override
                    public TriggerResult onEventTime(long l, GlobalWindow globalWindow, TriggerContext triggerContext) throws Exception {
                        return null;
                    }

                    @Override
                    public void clear(GlobalWindow globalWindow, TriggerContext triggerContext) throws Exception {

                    }
                })
                .apply(new WindowFunction<String, String, String, GlobalWindow>() {
                    @Override
                    public void apply(String s, GlobalWindow globalWindow, Iterable<String> iterable, Collector<String> collector) throws Exception {
                        for (String res : iterable) {
                            collector.collect(res);
                        }
                    }
                })
                .print();

        env.execute();
    }
}
相关推荐
少废话h29 分钟前
Spark 中数据读取方式详解:SparkSQL(DataFrame)与 SparkCore(RDD)方法对比及实践
大数据·sql·spark
AgeClub1 小时前
当“钢铁护工”进入家庭,Figure 03如何重建老年居家生活?
大数据·人工智能
代码匠心2 小时前
从零开始学Flink:事件驱动
java·大数据·flink·大数据处理
Lx3523 小时前
Flink自定义函数:UDF、UDAF和UDTF实战
大数据
jiuweiC3 小时前
常用es sql
大数据·sql·elasticsearch
easy_coder4 小时前
从HDFS NN报错看Flink+K8s+HDFS:基础、架构与问题关联
hdfs·flink·kubernetes
武子康5 小时前
大数据-143 ClickHouse 实战MergeTree 分区/TTL、物化视图、ALTER 与 system.parts 全流程示例
大数据·后端·nosql
Hello.Reader5 小时前
用 Spark Shell 做交互式数据分析从入门到自包含应用
大数据·数据分析·spark
qq_12498707536 小时前
基于hadoop的电商用户行为分析系统(源码+论文+部署+安装)
大数据·hadoop·分布式·毕业设计