Flink学习 - 5. Flink之DataSource

Flink学习 - 5. Flink之DataSource

  • DataSource
  • Flink自带的DataSource
    • socket
    • 给定元素
    • 基于集合
    • 文件生成
    • 自定义DataSource
      • RichSourceFunction

DataSource

简单来说,DataSource是指数据来源,也是其字面意思,Flink无论是实时流计算还是批计算都基于数据进行,其数据源是非常重要的一部分,Flink在命名这一方面非常的直白,可以直接从字面意思来理解基本功能。

通常来说source的定义需要使用

StreamExecutionEnvironment.addSource(sourceFunction)

通过上述方法在程序中添加或者定义数据源。

Flink自带的DataSource

Flink官方定义了非常多的DataSource。如果需要可以直接使用对应的DataSource。

Flink学习 - 5. Flink之DataSource_第1张图片

socket

  1. socketTextStream

监听一个端口,生成DataSource,并行度为1的DataSource

DataStreamSource nums = env.socketTextStream("localhost", 12800);

给定元素

  1. fromElements()

一般用于单元测试程序或者调试代码使用,给定一些元素生成一个source。并行度是1的DataSource

StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();

DataStreamSource> dataStream = env.fromElements(new Tuple2(1, 5), new Tuple2(2, 2), new Tuple2(2, 4), new Tuple2(1, 3));

基于集合

  1. fromCollection

从集合中生成source,集合中的元素必须是相同类型。这是并行度是1的DataSource。

DataStreamSource nums = env.fromCollection(Arrays.asList(1, 2, 3, 4, 5, 6, 7));
  1. fromParallelCollection

从迭代器中生成source,Flink指定的迭代器主要是两种,这是一个并行度为默认并行度的DataSource。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-30LqxtPH-1577094589673)(http://note.youdao.com/yws/res/21447/04EA91658CFD472AB853F5094CED6FFB)]

DataStreamSource nums = env.fromParallelCollection(new NumberSequenceIterator(1, 20), TypeInformation.of(Long.TYPE));

DataStreamSource nums = env.fromParallelCollection(new NumberSequenceIterator(2, 20), Long.class);
  1. generateSequence
    从一个区间范围内的的数字生成DataSource,这是一个并行度为默认并行度的DataSource。
DataStreamSource nums = env.generateSequence(1, 100);

文件生成

  1. readTextFile

从文件中读取,指定是text文件格式的文件

DataStreamSource stringDataStreamSource = env.readTextFile("file:///path/to/file");
  1. readFile

执行输入文件格式,可以定义fileInputFormat

DataStreamSource stringDataStreamSource = env.readFile(new CsvInputFormat(new Path("file:///path/to/file")) {
            @Override
            protected String fillRecord(String reuse, Object[] parsedValues) {
                return null;
            }
        }, "file:///path/to/file");

自定义DataSource

Flink给出了很多DataSource,但是从使用场景来看主要是用于测试比较多,所以大多的DataSource都是需要自定义的,而自定义的主要使用addSource来生成对应的DataSource。

如使用kafkasource:

StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();

Properties prop = new Properties();
prop.setProperty("bootstrap.servers","localhost:9092");


String topic = parameter.get("topic","test");

FlinkKafkaConsumer kafkaConsumer = new FlinkKafkaConsumer<>(topic, new SimpleStringSchema(), prop);

kafkaConsumer.setStartFromEarliest();

DataStreamSource source = env.addSource(kafkaConsumer);

Flink 已经给出了很多source,目前支持的:

Flink学习 - 5. Flink之DataSource_第2张图片

如果完全自定义DataSource,需要了解sourceFunction,通常使用RichSourceFuction

RichSourceFunction

图片来源:justdojava.com/2019/10/24/flink_learn_datasource/

一张图讲清楚了具体的使用及各个方法的作用。

Flink学习 - 5. Flink之DataSource_第3张图片

你可能感兴趣的:(Flink)