欢迎光临散文网 会员登陆 & 注册

Flink入门教程——DataStream编程(1)

2021-06-04 16:14 作者:汇智知了堂  | 我要投稿

1.1 输入流

源是程序从中读取输入的位置,可以使用以下方法将源附加到您的程序:

StreamExecutionEnvironment.addSource(sourceFunction) 。

Flink附带了许多预先实现的源函数,但您可以通过实现 SourceFunction 非并行源,或通过实现

ParallelSourceFunction 接口或扩展 RichParallelSourceFunction for parallel源来编写自己的自

定义源。

有几个预定义的流源可从以下位置访问 StreamExecutionEnvironment :

基于文件:

readTextFile(path) - TextInputFormat 逐行读取文本文件,即符合规范的文件,并将它们作

为字符串返回。

readFile(fileInputFormat, path) - 按指定的文件输入格式指定读取(一次)文件。

readFile(fileInputFormat, path, watchType, interval, pathFilter, typeInfo) - 这

是前两个内部调用的方法。它 path 根据给定的内容读取文件 fileInputFormat 。根据提供的内

容 watchType ,此源可以定期监视(每 interval ms)新数据

( FilePROCessingMode.PROCESS_CONTINUOUSLY )的路径,或者处理当前在路径中的数据并退

出( FilePROCessingMode.PROCESS_ONCE )。使用 pathFilter ,用户可以进一步排除正在处

理的文件。

实现

Flink将文件读取过程分为两个子任务,即目录监控和数据读取。这些子任务中的每一个都由单独

的实体实现。监视由单个非并行(并行性= 1)任务实现,而读取由并行运行的多个任务执行。后

者的并行性等于工作并行性。单个监视任务的作用是扫描目录(定期或仅一次,具体取决于

watchType ),找到要处理的文件,将它们分成分割,并将这些拆分分配给下游读者。读者是那

些将阅读实际数据的人。每个分割仅由一个读取器读取,而读取器可以逐个读取多个分割。

重要笔记:

  1. 如果 watchType 设置为 FilePROCessingMode.PROCESS_CONTINUOUSLY ,则在修改文件时,将完全重新处理其内容。这可以打破“完全一次”的语义,因为在文件末尾附加数据将导致其所有内容被重新处理。

  2. 如果 watchType 设置为 FilePROCessingMode.PROCESS_ONCE ,则源扫描路径一次并退出,而不等待读者完成读取文件内容。当然读者将继续阅读,直到读取所有文件内容。在该点之后关闭源将导致不再有检查点。这可能会导致节点故障后恢复速度变慢,因为作业将从上一个检查点恢复读取。

基于Socket

  • socketTextStream - 从Socket中读取,元素可以用分隔符分隔。

基于集合:

  • fromCollection(Collection) - 从Java Java.util.Collection创建数据流。集合中的所有元素必须

属于同一类型。

  • fromCollection(Iterator, Class) - 从迭代器创建数据流。该类指定迭代器返回的元素的数

据类型。

fromElements(T ...) - 从给定的对象序列创建数据流。所有对象必须属于同一类型。

  • fromParallelCollection(SplittableIterator, Class) - 并行地从迭代器创建数据流。该类

指定迭代器返回的元素的数据类型。

  • generateSequence(from, to) - 并行生成给定间隔中的数字序列。

自定义:

  • addSource - 附加新的源功能。例如,要从Apache Kafka读取,可以使用 addSource(new

FlinkKafkaConsumer08<>(...)) 。


今天先分享到这儿,明天为大家分享DataStream编程——数据流转换。

Flink入门教程——DataStream编程(1)的评论 (共 条)

分享到微博请遵守国家法律