什么可以流式传输?
Flink 的 Java 和 Scala 的 DataStream API 可以让你流式传输任何它们可以序列化的东西。Flink 自己的序列化器用于
- 基本类型:Flink支持所有的Java和Scala基础数据类型,Int, Double, Long, String, …
- 复合类型:元组、POJO 和 Scala 案例类
Java 元组和 POJO
元组
对于 Java,Flink 定义了自己的Tuple0直通Tuple25类型。
Tuple2<String, Integer> person = Tuple2.of("Fred", 35);
// zero based index!
String name = person.f0;
Integer age = person.f1;
POJO
如果满足以下条件,Flink 将数据类型识别为 POJO 类型(并允许“按名称”字段引用):
- 该类是公共且独立的(没有非静态内部类)
- 该类有一个公共的无参数构造函数
- 类(和所有超类)中的所有非静态、非瞬态字段要么是公共的(和非最终的),要么具有遵循 Java bean 的 getter 和 setter 命名约定的公共 getter- 和 setter- 方法。
public class Person {
public String name;
public Integer age;
public Person() {}
public Person(String name, Integer age) {
. . .
}
}
Person person = new Person("Fred Flintstone", 35);
Scala样例类(case classes)
case class Person(name: String, age: Int)
val persons: DataStream[Person] = env.fromElements(
Person("Adam", 17),
Person("Sarah", 23))
persons.filter(p => p.age > 18)