学习Flink的第二天

163 阅读1分钟

这是我参与11月更文挑战的第3天,活动详情查看:2021最后一次更文挑战

Flink的变成模型

首先Flink是一个数据处理的框架,所以

  1. 第一步是对接数据源,
  2. 然后使用引擎进行业务逻辑处理
  3. 最后写到某个地方去 Flink: 对接数据Source ==》 处理一堆Transformation ==> 结果为Sink

看一下源码,首先拿到上下文 env就会发现有addSource , Transaction ,以及 最后 Sink出去的操作

image.png

这里边有很多的 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");