Flink
-
无界流 (Unbounded Streams): 数据流理论上没有终点,持续不断地流入系统。Flink 会连续地处理这些事件,即使在处理过程中新的数据还在不断到来。
-
有界流 (Bounded Streams): 数据流有一个明确的起点和终点,处理完所有数据后任务即结束。Flink 可以像处理流一样处理批数据,采用相同的 API 并提供高效执行。
编写一个Flink步骤
- 创建一个flink执行环境
- 创建一个数据来源 source
- 编写流操作 transformations
- 数据流出口 sink
- 执行任务 execute
public class SimpleFlinkJob {
public static void main(String[] args) throws Exception {
// 创建执行环境
final StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
// 设置 Kafka 消费者参数
Properties kafkaProps = new Properties();
kafkaProps.setProperty("bootstrap.servers", "localhost:9092");
kafkaProps.setProperty("group.id", "testGroup");
// 创建 Kafka 数据源
FlinkKafkaConsumer<String> kafkaSource = new FlinkKafkaConsumer<>("input-topic", new SimpleStringSchema(), kafkaProps);
// 从 Kafka 中读取数据流
DataStream<String> stream = env.addSource(kafkaSource);
// 定义数据转换操作,这里是对字符串计数
DataStream<Tuple2<String, Integer>> counts = stream
.map(new MapFunction<String, Tuple2<String, Integer>>() {
@Override
public Tuple2<String, Integer> map(String value) {
return new Tuple2<>(value, 1);
}
})
.keyBy(0)
.sum(1);
// 打印输出结果
counts.print().setParallelism(1);
// 执行任务
env.execute("Simple Flink Job");
}
Source:flink的数据来源
-
集合
** * 一般用于学习测试时使用 * 1.env.fromElements(可变参数); * 2.env.fromColletion(各种集合); * 3.env.generateSequence(开始,结束); * 4.env.fromSequence(开始,结束); * * @param args 基于集合 * @throws Exception */ // source DataStream<String> ds1 = env.fromElements("i am alanchan", "i like flink"); DataStream<String> ds2 = env.fromCollection(Arrays.asList("i am alanchan", "i like flink")); DataStream<Long> ds3 = env.generateSequence(1, 10);//已过期,使用fromSequence方法 DataStream<Long> ds4 = env.fromSequence(1, 10);
-
文件
/** * env.readTextFile(本地/HDFS文件/文件夹),压缩文件也可以 */ DataStream<String> ds1 = env.readTextFile("D:src/main/resources/words.txt"); DataStream<String> ds2 = env.readTextFile("D:/workspace/distribute_cache_student"); DataStream<String> ds3 = env.readTextFile("D:/words.tar.gz"); DataStream<S