说明
  • 本博客每周五更新一次。
  • flink被定义为第三代大数据平台计算框架处理引擎,由java和scala语言开发,Data Artisans公司开发,阿里将其应用于阿里云平台,并开发出更多新功能,2019年阿里以9000万欧元购买Data Artisans功能。国内技术可控性强,不用担心技术封锁。
  • 从去年开始,flink在国内火爆,主打流批一体,原有的DataSet在1.12版本开始,无论流还是批处理,统一并入DataStream,大量接口过期,引入了很多新的处理方式。
有界与无界

有界数据集

  • 具有时间边界的数据集,处理过程中数据一定会在某个时间内开始和结束。

无界数据集

  • 数据只有开始没有边界。
flink接口结构

FLink SQL

  • SQL API支持批和流的计算。

Flink Table

  • Table API将内存中的DataStream和DataSet数据集在原有的基础上增加Schema信息,将数据类型统一抽象成表结构,然后通过Table API接口处理对应的数据集。
  • SQL API可以直接查询Table API注册表的数据。
  • Tabel API 提供大量接口如GroupByKey、Join等,并支持和DataStream和DataSet的相互转换。

DataStream

  • 有编程经验者使用,1.12版本开始DataStream处理流批数据,DataSet接口逐步废除。

Stateful Stream Processing API

  • Flink最底层接口,灵活性非常强,可实现复杂的流式计算逻辑,使用成本较高,一般企业级用户使用它进行二次开发或深度封装。
程序结构 DataStream API
  1. 设定运行环境,支持动态(本地和线上)启动、本地启动、远程线上启动三种。
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
//指定处理方式批处理、流处理、自适应
env.setRuntimeMode(RuntimeExecutionMode.AUTOMATIC);

  1. 指定数据源
DataSet<String> text = env.readTextFile("/path/to/file");

  1. 操作数据集
DataSet<Tuple2<String, Integer>> counts =
        text.flatMap(_.toLowerCase.split(" ")) //实行map转换
        .filter(_.nonEmpty)  //过滤控制
        .map((_,1)) //执行map转换,转换为key-value 
        .keyBy(0)  //按照指定第一个字段key进行分区,
        .sum(1); //分区后按第二个字段求和

  1. 指定结果输出
counts.writeAsCsv(outputPath, "\n", " ");

  1. 指定名称并触发
 env.execute("Streaming Count");

数据类型
  • flink有丰富的数据类型支持,统一由TypeInformation定义。支持与java、scala任意数据类型转换。

原生数据类型

  • BasicTypeInfo类型支持任意java基础类型和String类型。

java Tuples

  • TupleTypeInfo描述Tuple类型数据,2019年版本支持字段上线为25个。

scala Case class

  • CaseClassTypeInfo支持任意Scala Case class,包括Scala tuples,2019年支持最大字段数为22个。

POJOs类型

  • PojoTypeInfo描述任意POJO类型,
    • POJO类必须是public修饰的非内部类。
    • POJO类必须含有默认空构造器
    • PoJO类所有字段必须是public,类型必须是flink支持的。

Flink Value类型

  • Value数据类型实现了org.apache.flink.types.Value,其中包含read()和write()两种序列化和反序列化操作。目前内建类型有IntValue、DoubleValue、StringValue。

特殊数据类型

  • scala中的List、Map、Either、Option、Try,java中Either,hadoop中Writable。
总结
  • Flink作为新一代计算引擎,在实时计算领域有着及其重要的地位,同时也有这复杂的概念,时间窗口、水位线等,学习并理解成本不低。