Flink中自定义Source和Sink的使用

只要自定一个Source类实现SourceFunction接口,一个Sink类实现SinkFunction接口,就能正常使用自定义的Source和Sink,或者直接extends继承RichSourceFunction和RichSinkFunction, RichSinkFunction:多个open和close方法

1、自定义Source

java 复制代码
import org.apache.flink.streaming.api.datastream.DataStream;
import org.apache.flink.streaming.api.datastream.DataStreamSource;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
import org.apache.flink.streaming.api.functions.source.SourceFunction;

public class Demo3SourceFunction {
    public static void main(String[] args) throws Exception {
        StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
        //使用自定义source
        DataStream<Integer> myDS = env.addSource(new MySource());
        myDS.print();

        env.execute();
    }
}

//自定义source
//实现SourceFunction接口
class MySource implements SourceFunction<Integer> {
    //在run方法中读取外部的数据,使用原生java代码
    @Override
    public void run(SourceContext<Integer> ctx) throws Exception {
        while (true) {
            ctx.collect(1);
            Thread.sleep(1000);
        }
    }

    //cancel方法是任务被取消是执行的,用于回收资源
    @Override
    public void cancel() {
    }
}

2、自定义Sink

java 复制代码
import org.apache.flink.streaming.api.datastream.DataStreamSource;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
import org.apache.flink.streaming.api.functions.sink.SinkFunction;

public class Demo2MySink {
    public static void main(String[] args) throws Exception {
        StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
        DataStreamSource<String> linesDS = env.socketTextStream("master", 8888);
        linesDS.addSink(new MySink());

        env.execute();
    }
}

//自定义Sink
class MySink implements SinkFunction<String> {
    //每一条数据执行一次
    @Override
    public void invoke(String value, Context context) throws Exception {
        System.out.println("mySink:" + value);
    }
}
相关推荐
翰林小院2 天前
【大数据专栏】流式处理框架-Apache Fink
大数据·flink
过尽漉雪千山3 天前
Flink1.17.0集群的搭建
java·大数据·linux·flink·centos
mask哥3 天前
详解mcp以及agen架构设计与实现
java·微服务·flink·大模型·ai agent·springai·mcp
潘达斯奈基~4 天前
Google AI Studio使用1:创建Flink测试题APP
大数据·flink·aigc
jiedaodezhuti5 天前
Flink on YARN 实战问题排查指南(精华版)
大数据·flink
Hello.Reader5 天前
Apache Flink 从流处理基础到恰好一次语义
flink·apache·linq
天翼云开发者社区6 天前
Flink 与Flink可视化平台StreamPark教程(CDC功能)
大数据·flink
Apache Flink7 天前
Flink Agents:基于Apache Flink的事件驱动AI智能体框架
人工智能·flink·apache
索迪迈科技7 天前
Flink Task线程处理模型:Mailbox
java·大数据·开发语言·数据结构·算法·flink