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();
    }
}
相关推荐
一水鉴天44 分钟前
整体设计 全面梳理复盘 之39 生态工具链 到顶级表征及其完全公理化
大数据·人工智能·算法
草原印象2 小时前
全文检索ElasticSearch实战
大数据·elasticsearch·全文检索
Guheyunyi3 小时前
安防监控系统,如何为你的生活构筑智慧安全屏障?
大数据·人工智能·安全·信息可视化·生活
TDengine (老段)3 小时前
TDengine 字符串函数 Replace 用户手册
java·大数据·数据库·物联网·时序数据库·tdengine·涛思数据
武子康4 小时前
大数据-156 Apache Druid+Kafka 实时分析实战:JSON 拉平摄取与 SQL 指标全流程
大数据·后端·nosql
邮专薛之谦4 小时前
Git复习(查询版本)
大数据·elasticsearch·搜索引擎
悟能不能悟4 小时前
部署和测试 apereo/cas
大数据
小二·5 小时前
Git 高频操作命令大全(分类整理 + 修正说明)
大数据·git·elasticsearch
程序猿小白日记5 小时前
5G技术:推动智能制造和工业互联网革命的核心动力
flink
chatexcel5 小时前
ChatExcel亮相GTC2025全球流量大会
大数据·人工智能