Flink1.18 Sink - 自定义sink

package com.xiaohu.sink;

import org.apache.flink.configuration.Configuration;
import org.apache.flink.streaming.api.datastream.DataStreamSource;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
import org.apache.flink.streaming.api.functions.sink.RichSinkFunction;
import org.apache.flink.streaming.api.functions.sink.SinkFunction;

/*
    自定义sink
 */
public class CustomSinkDemo {
    public static void main(String[] args) throws Exception {
        StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
        env.setParallelism(1);
        DataStreamSource<String> socketSource = env.socketTextStream("master", 7777);

        socketSource.addSink(new MySink());


        env.execute();
    }

    //TODO: 实现普通SinkFunction接口
//    public static class MySink implements SinkFunction<String>{
//        /*
//            sink的核心逻辑,写逻辑就写在这个方法里
//            注意:这个方法是来一条数据调用一次,不要在这里创建连接对象,所以一般自定义sink是继承富函数类
//         */
//        @Override
//        public void invoke(String value, Context context) throws Exception {
//            //写出逻辑:比如写到mysql
//            SinkFunction.super.invoke(value, context);
//        }
//    }

    //TODO: 继承RichXxxFunction
    public static class MySink extends RichSinkFunction<String>{

        @Override
        public void open(Configuration parameters) throws Exception {
            //任务启动,每个子任务会调用一次,在这里创建连接对象,配合状态使用
            super.open(parameters);
        }

        @Override
        public void invoke(String value, Context context) throws Exception {
            super.invoke(value, context);
        }

        @Override
        public void close() throws Exception {
            //清理,销毁对象
            super.close();
        }
    }

}
posted @ 2025-02-26 20:45  Xiaohu_BigData  阅读(128)  评论(0)    收藏  举报