【Flink】Data Source

Flink可以从各种来源获取数据,然后构建DataStream进行转换处理。一般将数据的输入来源称为数据源(data source),而读取数据的算子就是源算子(source operator)。所以,source就是我们整个处理程序的输入端。在这里插入图片描述

通过 StreamExecutionEnvironment 可以访问多种预定义的 stream source

基于文件(过时的):

/*
<dependency>
   <groupId>org.apache.flink</groupId>
    <artifactId>flink-connector-files</artifactId>
    <version>${flink.version}</version>
    <scope>provided</scope>
</dependency>
*/
//readTextFile(path) - 读取文本文件,例如遵守 TextInputFormat 规范的文件,逐行读取并将它们作为字符串返回。
executionEnvironment.readTextFile("D:\\...\\dataFile.txt");

//readFile(fileInputFormat, path) - 按照指定的文件输入格式读取(一次)文件。
executionEnvironment.readFile(new TextInputFormat(new Path("")),"")

//readFile(fileInputFormat, path, watchType, interval, pathFilter, typeInfo) - 这是前两个方法内部调用的方法。它基于给定的 fileInputFormat 读取路径 path 上的文件。根据提供的 watchType 的不同,source 可能定期(每 interval 毫秒)监控路径上的新数据(watchType 为 FileProcessingMode.PROCESS_CONTINUOUSLY),或者处理一次当前路径中的数据然后退出(watchType 为 FileProcessingMode.PROCESS_ONCE)。使用 pathFilter,用户可以进一步排除正在处理的文件。

基于套接字(常用的):

//socketTextStream - 从套接字读取。元素可以由分隔符分隔。	
executionEnvironment.socketTextStream("127.0.0.1",7777)

基于集合(测试使用):

//fromCollection(Collection) - 从 Java Java.util.Collection 创建数据流。集合中的所有元素必须属于同一类型。
executionEnvironment.fromCollection(Arrays.asList("aa", "bb", "cc"));

//fromCollection(Iterator, Class) - 从迭代器创建数据流。class 参数指定迭代器返回元素的数据类型。
executionEnvironment.fromCollection(Arrays.asList("aa", "bb", "cc").listIterator(),String.class);

//fromElements(T ...) - 从给定的对象序列中创建数据流。所有的对象必须属于同一类型。
executionEnvironment.fromElements("aa", "bb");

//fromParallelCollection(SplittableIterator, Class) - 从迭代器并行创建数据流。class 参数指定迭代器返回元素的数据类型。
NumberSequenceIterator numberSequenceIterator = new NumberSequenceIterator(1, 10);
executionEnvironment.fromParallelCollection(numberSequenceIterator, Long.class).print();

//generateSequence(from, to) - 基于给定间隔内的数字序列并行生成数据流。
executionEnvironment.generateSequence(1, 20);

自定义:

//addSource(过时的,1.12之前版本) - 关联一个新的 source function。例如,你可以使用 addSource(new FlinkKafkaConsumer<>(...)) 来从 Apache Kafka 获取数据。更多详细信息见连接器。
executionEnvironment.addSource(new FromElementsFunction<Object>("aa","bb ff","ff mm"));
//fromSource 将数据源添加到环境中以获取数据流。
//读取文件流
final FileSource<String> source = FileSource.forRecordStreamFormat(new TextLineFormat(), new Path("")).build();
final DataStream<String> stream = executionEnvironment.fromSource(source, WatermarkStrategy.noWatermarks(), "file-source");
//从kafka读取流
/*
<dependency>
    <groupId>org.apache.flink</groupId>
    <artifactId>flink-connector-kafka</artifactId>
    <version>${flink.version}</version>
</dependency>
*/
KafkaSource<String> kafkaSource = KafkaSource
                .<String>builder()
                .setBootstrapServers("hadoop115:9092,hadoop116:9092,hadoop117:9092")
                .setTopics("topic-events-1")
                .setGroupId("test")
                .setPartitions(new HashSet<>(5))
                .setValueOnlyDeserializer(new SimpleStringSchema())
                .setStartingOffsets(OffsetsInitializer.earliest())
                .build();

final DataStream<String> stream = executionEnvironment.fromSource(kafkaSource, WatermarkStrategy.noWatermarks(), "file-source");
//从数据生成器读取数据
/*
 <dependency>
   <groupId>org.apache.flink</groupId>
    <artifactId>flink-connector-datagen</artifactId>
    <version>${flink.version}</version>
</dependency>
*/
DataGeneratorSource<String> dataGeneratorSource =
                new DataGeneratorSource<>(
                        new GeneratorFunction<Long, String>() {
                            @Override
                            public String map(Long value) throws Exception {
                                return "Number:"+value;
                            }
                        },
                        Long.MAX_VALUE,
                        RateLimiterStrategy.perSecond(10),
                        Types.STRING
                );


final DataStream<String> stream = executionEnvironment
                .fromSource(dataGeneratorSource, WatermarkStrategy.noWatermarks(), "datagenerator")
                .print();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lxtx-0510

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值