这是我参与11月更文挑战的第3天,活动详情查看:2021最后一次更文挑战
Flink的变成模型
首先Flink是一个数据处理的框架,所以
- 第一步是对接数据源,
- 然后使用引擎进行业务逻辑处理,
- 最后写到某个地方去 Flink: 对接数据Source ==》 处理一堆Transformation ==> 结果为Sink
看一下源码,首先拿到上下文 env就会发现有addSource , Transaction ,以及 最后 Sink出去的操作
这里边有很多的 DataStream 关于DateStream 官网文章在这里:nightlies.apache.org/flink/flink…
官网告诉我们,Flink的 java 和 Scala DataStream API 可以将任何序列化的对象转化成流,
基本类型: Sting ,Long,Integer ,Boolean,Array 复合类型: Tuples,Pojos ,Scala case Classes
对于 Java,Flink 自带有 Tuple0 到 Tuple25 类型。
Tuple2<String, Integer> person = Tuple2.of("Fred", 35);
// zero based index!
String name = person.f0;
Integer age = person.f1;
POJOs #
如果满足以下条件,Flink 将数据类型识别为 POJO 类型(并允许“按名称”字段引用):
- 该类是公有且独立的(没有非静态内部类)
- 该类有公有的无参构造函数
- 类(及父类)中所有的所有不被 static、transient 修饰的属性要么是公有的(且不被 final 修饰),要么是包含公有的 getter 和 setter 方法,这些方法遵循 Java bean 命名规范。
示例:
public class Person {
public String name;
public Integer age;
public Person() {}
public Person(String name, Integer age) {
. . .
}
}
Person person = new Person("Fred Flintstone", 35);
Flink 的序列化器支持的 POJO 类型数据结构升级。
stream source 基础用法
List<Person> people = new ArrayList<Person>();
people.add(new Person("Fred", 35));
people.add(new Person("Wilma", 35));
people.add(new Person("Pebbles", 2));
DataStream<Person> flintstones = env.fromCollection(people);
另一个获取数据到流中的便捷方法是用 socket
DataStream<String> lines = env.socketTextStream("localhost", 9999)
或读取文件
DataStream<String> lines = env.readTextFile("file:///path");