Flink的数据源(Data Source)是将外部数据导入Flink流处理程序的机制。它读取外部存储里的数据,生成Flink的DataStream。
Flink提供了丰富的数据源支持,主要有:
- 文件数据源:读取本地文件、HDFS文件等, 生成DataStream。
- 集合数据源:从Java集合生成DataStream。
- 自定义数据源:实现自定义SourceFunction生成DataStream。
- Kafka数据源:从Kafka Topic生成DataStream。
- Socket数据源:从Socket连接生成DataStream。
使用Flink数据源的一般步骤:
- 添加数据源依赖(如果有)。
- 创建数据源对象,指定输入路径、序列化器等。
- 使用env.addSource()方法将数据源添加到流环境,生成DataStream。
- 对生成的DataStream进行操作(转换、输出等)。
下面通过文件数据源和Kafka数据源的例子来说明Flink数据源的使用:
文件数据源:
DataStream<String> stream = env.readTextFile("file:///path/to/file");
Kafka数据源:
Properties props = new Properties();
props.put("bootstrap.servers", "localhost:9092");
props.put("group.id", "testGroup");
FlinkKafkaConsumer011<String> kafkaSource = new FlinkKafkaConsumer011<>(
"topic",
new SimpleStringSchema(),
props);
DataStream<String> stream = env.addSource(kafkaSource);
自定义数据源:
public static class CustomSource implements SourceFunction<Integer> {
@Override
public void run(SourceContext<Integer> ctx) throws Exception {
for (int i = 0; i < 10; i++) {
ctx.collect(i);
}
}
@Override
public void cancel() { ... }
}
DataStream<Integer> stream = env.addSource(new CustomSource());
Flink数据源为我们构建流式程序提供了基础数据输入方式。
Flink数据源机制使我们的流式程序具有强大的数据输入能力。
Flink提供了丰富的内置数据源和自定义SourceFunction支持。