抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >


Flink 常用的算子

在 Flink 应用程序中,无论你的应用程序是批程序,还是流程序,都是下图这种模型,有数据源(source),有数据下游(sink

Flink 数据处理模型

Source: 数据源

  • 基于本地集合、基于文件、基于网络套接字
  • 自定义的 source
  • Apache kafkaRabbitMQ

Transformation: 数据转换

  • Map / FlatMap / Filter / KeyBy / Reduce / Fold / Aggregations / Window / WindowAll / Union / Window join / Split / Select / Project

Sink: 接收器

  • 写入文件、打印出来、写入 Socket 、自定义的 Sink
  • 自定义的 Sink
  • Apache kafkaRabbitMQMySQLElasticSearchApache CassandraHDFS

Map

获取一个元素并生成一个元素

FlatMap

获取一个元素并生成零个、一个或多个元素

filter

filter

KeyBy

KeyBy 在逻辑上是基于 key 对流进行分区,相同的 Key 会被分到一个分区

KeyBy

Aggregations

DataStream API 支持各种聚合, 这些函数可以应用于 KeyedStream 以获得 Aggregations 聚合

常用的方法有

  • minminBymaxminBysum
  • maxmaxBy 之间的区别在于 max 返回流中的最大值,但 maxBy 返回具有最大值的键, minminBy 同理

Window

Window 函数允许按时间或其他条件对现有 KeyedStream 进行分组

10 秒的时间窗口的和(聚合)

socketStream.keyBy(0).window(Time.seconds(10)).sum(1)

Union

Union 函数将两个或多个数据流结合在一起,这样后面在使用的时候就只需使用一个数据流就行了

inputStream.union(inputStream1, inputStream2, ...)
val socketStream = env.socketTextStream("localhost", 9000, '\n')
val textStream = env.readTextFile("/word.txt")
socketStream.union(textStream)

Window Join

通过一些 key 将同一个 window 的两个数据流 join 起来

stream.join(otherStream)
.where(<KeySelector>)
.equalTo(<KeySelector>)
.window(<WindowAssigner>)
.apply(<JoinFunction>)
inputStream.join(inputStream1)
.where(0).equalTo(1)
.window(Time.seconds(5))
.apply (new JoinFunction () {...});

Split

根据条件将流拆分为两个或多个流

Split

Select

从拆分流中选择特定流,那么就得搭配使用 Select 算子

通常搭配 Split 算子一起使用

Select

推荐阅读
Flink 中的三种Window Flink 中的三种Window Flink 概述 Flink 概述 Flink 编程模型 Flink 编程模型 Flink Flink Flink 时间语义 Flink 时间语义 Flink实时处理Socket数据 Flink实时处理Socket数据

留言区

Are You A Robot?