Flink概念及数据流编程模型

1、基本概念

  • Flink程序的基础构建模块是流Stream(指输入) 和转换Transformations(对输入的数据进行操作,比如map操作、reduce操作)。
  • 每一个数据流起始于一个或多个source,并终止于一个或多个sink。
  • Flink程序映射为streaming dataflow的示意图。
    • env指的是Flink的运行环境或者是上下文。
    • addsource new FlinkkafkaConsumer 是通过Flink消费kafka,作为数据输入,即source
    • 将输入的数据进行转换,首先是map映射,对每一条数据进行parse解析。假如输入的数据是一个一个的json,那么要把json映射为代码中的实体类。
    • 继续进行transformation,进行id聚合、时间窗口的操作、时间窗口函数(等自定义函数)。
    • addsink,将处理好的数据进行落地。比如写入数据库。
  • 并行数据流示意图:
    • 数据的输入、转换、输出是可以并行的。
    • Flink天生是支持并行的。
    • source可以进行分区,将一个source分成多个子任务。对每一个子任务进行map。map后是一个shuffling的过程,然后根据key进行聚合、窗口操作等。
    • 最后sink出去。
    • 这里设置的并行度为2。即原本一个source拆分为两个并行的source,同时进行计算。

 

 

 

  •  时间窗口
    • 流上的聚合,需要窗口来划定范围,因为流是无界的。比如 “计算过去的5分钟” 或者 “最后100个元素的和” 。
    • 窗口通常被区分为不同的类型,比如滚动窗口(窗口和窗口之间没有数据重叠),滑动窗口(会出现数据重叠),会话窗口(由不活动的间隙所打断)。
  • Flink支持的窗口示意图
    • 最后一行为时间线。
    • raw stream data 原始数据流:输入的是一个一个的数字。
    • tumbling time window 滚动时间窗口:划定1min为一个窗口,即窗口大小为1min。
    • sliding time window 滑动时间窗口:需要指定一个sliding size。会出现同一个数字会属于上一个窗口,也会属于下一个窗口,会出现数据的重复。
    • trubling count window 滚动数量窗口:需要指定每一个窗口的数据数量。表示一个滚动窗口内需要3调数据。每当窗口里的三条数据抵达后,就开始进行下一个窗口的计算。
    • session window 会话窗口:规定假如用户访问10s内,没有操作,则认定一次会话结束。等待下一次会话开始,再进行计算,以此类推。

 

posted @ 2022-06-20 17:08  酱汁怪兽  阅读(402)  评论(0)    收藏  举报