Flink 做为流式计算框架,它可用来做批处理,处理静态的数据集、历史数据集;也可以用来做流处理,处理实时数据流,实时的产生数据流结果,只要数据源源不断的过来,Flink 就能够一直计算下去,这个 Data Sources 就是数据源。

Flink 中你可以使用 StreamExecutionEnvironment.getExecutionEnvironment().addSource(sourceFunction) 来添加数据源。

Flink 已经提供若干实现好了的 source functions。
Flink学习02——Data Source 介绍source functions可大致归为如下几类:

1、基于集合:有界数据集

  • fromCollection(Collection) - 从 Java 的 Java.util.Collection 创建数据流。集合中的所有元素类型必须相同。
  • fromCollection(Iterator, Class) - 从一个迭代器中创建数据流。Class 指定了该迭代器返回元素的类型。
  • fromElements(T …) - 从给定的对象序列中创建数据流。所有对象类型必须相同。
  • fromParallelCollection(SplittableIterator, Class) - 从一个迭代器中创建并行数据流。Class 指定了该迭代器返回元素的类型。

2、基于文件:适合监听文件修改并读取其内容

  • readTextFile(path) - 读取文本文件,即符合 TextInputFormat 规范的文件,并将其作为字符串返回。
  • readFile(fileInputFormat, path) - 根据指定的文件输入格式读取文件(一次)。
  • readFile(fileInputFormat, path, watchType, interval, pathFilter, typeInfo) - 这是上面两个方法内部调用的方法。它根据给定的 fileInputFormat 和读取路径读取文件。根据提供的 watchType,这个 source 可以定期(每隔 interval 毫秒)监测给定路径的新数据(FileProcessingMode.PROCESS_CONTINUOUSLY),或者处理一次路径对应文件的数据并退出(FileProcessingMode.PROCESS_ONCE)。你可以通过 pathFilter 进一步排除掉需要处理的文件。

3、基于 Socket:监听主机的 host port,从 Socket 中获取数据

  • socketTextStream(String hostname, int port) - 从 socket 读取。元素可以用分隔符切分。

4、自定义 addSource:多数用在无界的数据时。比如去消费 Kafka 某个 topic 上的数据,这时候就需要用到这个 addSource,Flink 直接提供了 FlinkKafkaConsumer011 等类可供你直接使用。你可以去看看FlinkKafkaConsumerBase 这个基础类,它是 Flink Kafka 消费的最根本的类。

Flink学习02——Data Source 介绍SourceFunction是所有 stream source 的根接口,它继承自一个标记接口(空接口)Function。
实现了如下两个方法:
Flink学习02——Data Source 介绍

1、run : 启动一个 source,即对接一个外部数据源然后 emit 元素形成 stream(大部分情况下会通过在该方法里运行一个 while 循环的形式来产生 stream)。

2、cancel : 取消一个 source,也即将 run 中的循环 emit 元素的行为终止。

正常情况下,一个 SourceFunction 实现这两个接口方法就可以了。其实这两个接口方法也固定了一种实现模板。

相关文章:

  • 2022-01-17
  • 2021-09-07
  • 2022-02-08
  • 2021-06-28
  • 2022-03-04
  • 2021-04-20
  • 2021-11-28
  • 2021-08-11
猜你喜欢
  • 2021-08-14
  • 2021-10-12
  • 2021-08-10
  • 2021-05-24
  • 2022-12-23
  • 2022-03-05
相关资源
相似解决方案