flink数据源
Flink附带了 许多预先实现的源函数,可以通过实现 SourceFunction 非并行源,或通过 实现 ParallelSourceFunction 接口或扩展 RichParallelSourceFunction 并行源来编写自己的自定义源。
有几个预定义的流源可从以下位置访问 StreamExecutionEnvironment : 基于文件的: readTextFile(path) - TextInputFormat 逐行读取文本文件,即符合规范 的文件,并将它们作为字符串返回。
1、readFile(fileInputFormat, path) - 按指定的文件输入格式指定读取 (一次)文件。
2、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 ,则源 扫描路径一次并退出,而不等待读者完成读取文件内容。当然读者将继续 阅读,直到读取所有文件内容。在该点之后关闭源将导致不再有检查点。 这可能会导致节点发生故障后恢复速度变慢,因为作业将从上一个检查点 恢复读取。
2、 socketTextStream - 从套接字读取。数据元可以用分隔符分隔。
基于集合:
1、fromCollection(Collection) - 从Java Java.util.Collection创建数据流。 集合中的所有数据元必须属于同一类型。
2、fromCollection(Iterator, Class) - 从迭代器创建数据流。该类指定迭 代器返回的数据元的数据类型。
3、fromElements(T ...) - 从给定的对象序列创建数据流。所有对象必须属于 同一类型。
4、fromParallelCollection(SplittableIterator, Class) - 并行地从迭代 器创建数据流。该类指定迭代器返回的数据元的数据类型。
generateSequence(from, to) - 并行生成给定间隔中的数字序列。 自定义: addSource - 附加新的源函数。