flink自定义窗口分配器

背景

我们知道处理常用的滑动窗口分配器,滚动窗口分配器,全局窗口分配器,会话窗口分配器外,我们可以实现自己的自定义窗口分配器,以实现我们的自己的窗口逻辑

自定义窗口分配器的实现

java 复制代码
package wikiedits.assigner;

import com.google.common.collect.Lists;
import org.apache.flink.api.common.ExecutionConfig;
import org.apache.flink.api.common.typeutils.TypeSerializer;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
import org.apache.flink.streaming.api.windowing.assigners.GlobalWindows;
import org.apache.flink.streaming.api.windowing.assigners.WindowAssigner;
import org.apache.flink.streaming.api.windowing.triggers.EventTimeTrigger;
import org.apache.flink.streaming.api.windowing.triggers.Trigger;
import org.apache.flink.streaming.api.windowing.windows.GlobalWindow;
import org.apache.flink.streaming.api.windowing.windows.TimeWindow;

import java.util.Collection;
import java.util.Collections;

public class IntervalWindowAssigner
        extends WindowAssigner<Object, TimeWindow> {
    private static final long serialVersionUID = 1L;
    private long windowSize = 60 * 1000L;

    private IntervalWindowAssigner() {}

    @Override
    public Collection<TimeWindow> assignWindows(
            Object element, long timestamp, WindowAssignerContext context) {

        long startTime = timestamp -  (timestamp % windowSize);
        long endTime = startTime + windowSize;

        return Lists.newArrayList(new TimeWindow(startTime, endTime));
    }

    @Override
    public Trigger<Object, TimeWindow> getDefaultTrigger(StreamExecutionEnvironment env) {
        return EventTimeTrigger.create();
    }

    @Override public TypeSerializer<TimeWindow> getWindowSerializer(ExecutionConfig executionConfig) {
        return new TimeWindow.Serializer();
    }

    @Override public boolean isEventTime() {
        return true;
    }
}

注意,TimeWindow时间窗口是左边右开的形式,参见下图所示

代码里面是以maxTimeStamp()为准的

相关推荐
璞华Purvar2 小时前
服贸会上的科技闪耀之星:璞华易研PLM系统引领产品研发潮流
大数据·人工智能·科技
小码农叔叔2 小时前
【大数据】Flink CDC 实时同步mysql数据
大数据·mysql·flink
B站计算机毕业设计超人3 小时前
计算机毕业设计hadoop+spark天气预测 天气可视化 天气大数据 空气质量检测 空气质量分析 气象大数据 气象分析 大数据毕业设计 大数据毕设
大数据·hive·hadoop·机器学习·spark·网络爬虫·数据可视化
雪碧没有冰块5 小时前
Flink源码剖析
大数据·flink
kkivivu6 小时前
家庭用超声波清洗机好用吗?推荐四款性能绝佳的超声波清洗机!
大数据
大G哥6 小时前
ELK日志收集之ES的DSL查询语句
大数据·elk·elasticsearch·搜索引擎·jenkins
青云交7 小时前
大数据新视界 --大数据大厂之数据质量评估指标与方法:提升数据可信度
大数据·sql·一致性·完整性·数据质量评估·数据可信度·准确性·时效性
黄焖鸡能干四碗7 小时前
【需求分析】软件系统需求设计报告,需求分析报告,需求总结报告(原件PPT)
大数据·人工智能·安全·测试用例·需求分析
YONG823_API9 小时前
电商平台数据批量获取自动抓取的实现方法分享(API)
java·大数据·开发语言·数据库·爬虫·网络爬虫
Data 31712 小时前
Hive数仓操作(十)
大数据·数据库·数据仓库·hive·hadoop