Flink 自定义数据源开发流程

1 继承SourceFunction和ParallelSourceFunction

复制代码
import org.apache.flink.streaming.api.functions.source.SourceFunction;

重新run()和cancel()方法

2 AccessSource 代码

复制代码
package com.zyb.flink.basic.source;
import com.zyb.flink.basic.bean.Access;
import org.apache.flink.streaming.api.functions.source.SourceFunction;
import java.util.Random;

public class AccessSource implements SourceFunction<Access> {
    boolean isRunning = true;

    @Override
    public void run(SourceContext<Access> ctx) throws Exception {
        Random random = new Random();
        String[] domains = {"pk1.com","pk2.com","pk3.com","pk4.com","pk5."};

        while (isRunning){
            long time = System.currentTimeMillis();
            ctx.collect(new Access(time,domains[random.nextInt(domains.length)],random.nextInt(1000)));
        }
        Thread.sleep(2000);
    }

    @Override
    public void cancel() {
        isRunning = false;
    }
}

3 Access代码

复制代码
package com.zyb.flink.basic.bean;

public class Access {
    private long time;
    private String domain;
    private double traffic;

    @Override
    public String toString() {
        return "Access{" +
                "time=" + time +
                ", domain='" + domain + '\'' +
                ", traffic=" + traffic +
                '}';
    }

    public Access() {
    }

    public Access(long time, String domain, double traffic) {
        this.time = time;
        this.domain = domain;
        this.traffic = traffic;
    }

    public long getTime() {
        return time;
    }

    public void setTime(long time) {
        this.time = time;
    }

    public String getDomain() {
        return domain;
    }

    public void setDomain(String domain) {
        this.domain = domain;
    }

    public double getTraffic() {
        return traffic;
    }

    public void setTraffic(double traffic) {
        this.traffic = traffic;
    }
}

4 测试代码

复制代码
package com.zyb.flink.basic.source;
import com.zyb.flink.basic.bean.Access;
import org.apache.flink.streaming.api.functions.source.SourceFunction;
import java.util.Random;

public class AccessSource implements SourceFunction<Access> {
    boolean isRunning = true;

    @Override
    public void run(SourceContext<Access> ctx) throws Exception {
        Random random = new Random();
        String[] domains = {"pk1.com","pk2.com","pk3.com","pk4.com","pk5."};

        while (isRunning){
            long time = System.currentTimeMillis();
            ctx.collect(new Access(time,domains[random.nextInt(domains.length)],random.nextInt(1000)));
        }
        Thread.sleep(2000);
    }

    @Override
    public void cancel() {
        isRunning = false;
    }
}
相关推荐
TechEdu20260638 分钟前
[计算机科学]大数据硬件架构与软件架构概览
大数据·计算机科学
爱莉希雅&&&44 分钟前
elasticsearch+kibana+logstash+filebeat链路部署流程
大数据·elasticsearch·搜索引擎·kibana·logstash·filebeat
FII工业富联科技服务1 小时前
从灯塔工厂到AI Factory新模式:AI正在重构制造业的四大核心能力
大数据·运维·人工智能·重构·ar·制造
小五传输1 小时前
自主可控建设指南:Serv-u替代方案,实现平滑迁移业务不中断
大数据·运维·安全
Spey_Events1 小时前
【核心议题发布】聚焦深度维修与 AI 智慧革新!2026中国民用航空维修智造展——议题重磅发布!
大数据·人工智能
czzxxxxxx1 小时前
创客匠人AI智能体:知识付费从“重人力”走向“自动化”的拐点
大数据·人工智能
大大大大晴天1 小时前
Hudi技术内幕:Clustering原理与实践
大数据
ZKNOW甄知科技1 小时前
燕千云深度集成飞书:以AI之力,开启无感IT运维体验
大数据·运维·网络·数据库·人工智能·低代码·集成学习
京和动物医院·总院1 小时前
2026年未央区宠物医院:如何挑选最适合您爱宠的健康守护者
大数据·人工智能·python
商业模式源码开发2 小时前
2026年GEO优化全解析:生成式引擎优化如何重构企业流量与品牌护城河
大数据·人工智能·ai