注意在高版本中SourceFunction以及其子类RichSourceFunction、ParallelSourceFunction等已经被标记为废弃,所以我们要看数据源的实现只需要关注Source接口(org.apache.flink.api.connector.source.Source)。了解Source背后的架构和运行原理有助于我们更好的使用Source,或者自定义实现新的数据源。
1. Data Source概览
1)核心组件
一个数据源有三个核心组件:split、SplitEnumerator和SourceReader。
- split(分片):是对source数据的一部分切分,如一个文件或者日志分区。分片是 source 进行任务分配和数据并行读取的基本粒度。
- SourceReader(源读取器):会请求split并进行处理,例如读取split所表示的文件或日志分区。SourceReader 在 TaskManagers 上的 SourceOperators 中并行运行,并生成并行的事件流/记录流。
- SplitEnumerator(分片枚举器):SplitEnumerator会生成split并将它们分配给 SourceReader。它在 JobManager 上以单实例运行,负责对未分配的split进行维护,并以均衡的方式将其分配给 reader。