Flink从入门到实战四[DataStream API]-10-Source-自定义数据源

自定义Source,最重要的一个步骤就是实现SourceFunction接口,定义一个Source类。
在这个自定义类中可以做你任何想做的事情,比如自定义数据源,输出各种自定义规则的数据。
在下面的demo中,我们使用Random每隔200毫秒就生成一个整数随机数,这样来模拟数据源源源不断的输出数据。

代码:

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;

import java.util.Random;

public class StreamSourceTest {

    private volatile static boolean running = true;

    public static void main(String[] args) throws Exception {
        StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
        DataStreamSource<Integer> dataStreamSource = env.addSource(new MySourceForInt());
        dataStreamSource.print();
        env.execute();
    }

    private static class MySourceForInt implements SourceFunction<Integer> {
        @Override
        public void run(SourceContext<Integer> ctx) throws Exception {
            Random random = new Random();
            while(running) {
                int a = random.nextInt(1000);
                Thread.sleep(200);
                ctx.collect(a);
            }
        }

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

输出:

10> 196
11> 289
12> 117
13> 908
14> 474
15> 904
16> 508
1> 136
2> 152
3> 307
4> 364
5> 60
6> 436
7> 266
8> 155
9> 117
10> 241
11> 947
12> 874
13> 445
14> 249
15> 123
16> 850