栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

Flink04 -- windowsAPI和时间语义

Flink04 -- windowsAPI和时间语义

文章目录
      • 1. window 概念
          • 1.1 为什么要有窗口
          • 1.2 什么叫窗口
          • 1.3 开窗的原理
      • 2. window 类型
          • 2.1 时间窗口
          • 2.2 计数窗口(根据窗口中key的个数来开窗)
      • 3. window API
          • 3.1 怎么新建窗口
          • 3.2 窗口聚合函数
          • 3.3 其它可选 API
      • 4. Flink中的时间语义
          • 4.1 Flink中的时间语义有哪些?
          • 4.2 Flink中哪些时间比较重要呢?
          • 4.3 设置Event Time
          • 4.4 如果按照事件发生的时间作为时间窗口 处理数据 会有什么问题?
          • 4.5 为了解决迟到数据 引入了watermark的概念
          • 4.6 watermark 就一定能保证延迟的数据不影响最终结果吗?
          • 4.5
          • 4.6 watermark的特点
          • 4.7 watermark的传递

1. window 概念
  • 1.1 为什么要有窗口
  • 实时流是源源不断的进行处理,为了得到一段流的处理后结果,此时就要把无限流转为有界流,此时Flink引入了窗口的概念。

  • 1.2 什么叫窗口
  • 实时流上截取的一段流 就叫一个窗口

  • 1.3 开窗的原理
  • 将流数据发到有限大小的桶中进行分析.例如每小时的数据开窗,8~9的数据为一个桶 ,9~10点的数据为一个桶。那么8~9的数据来了 那么就会放在8~9的桶中。

2. window 类型
  • 2.1 时间窗口
    • 滚动时间窗口
      • 窗口长度固定 且连续 不可以有重叠
    • 滑动时间窗口
      • 窗口长度固定 可以有重叠
    • 会话窗口
      • 一段时间没有接受到新数据 就会生成新的窗口 时间无对其
  • 2.2 计数窗口(根据窗口中key的个数来开窗)
    • 滚动计数窗口
    • 滑动计数窗口
3. window API
  • 3.1 怎么新建窗口
    • keyBy() 之后通过timeWindows 和 countWindow方法 定义时间窗口和计数窗口
  • 3.2 窗口聚合函数
    • 增量聚合函数
      • 每条数据到来就进行计算,保存一个中间聚合状态,等到窗口结束 输出结果

      ReduceFunction AggreateFunction minBy maxBy 等

    • 全窗口函数
      • 先把窗口所有的数据收集起来,等到计算的时候遍历所有数据

      ProcessWindownFunction windowFunction

  • 3.3 其它可选 API
  • trigger() —— 触发器
    定义 window 什么时候关闭,触发计算并输出结果
  • evitor() —— 移除器
    定义移除某些数据的逻辑
  • allowedLateness() —— 允许处理迟到的数据
  • sideOutputLateData() —— 将迟到的数据放入侧输出流
  • getSideOutput() —— 获取侧输出流
4. Flink中的时间语义
  • 4.1 Flink中的时间语义有哪些?
    • 在 Flink 的流式处理中,会涉及到时间的不同概念
      • Event time 事件发生时间
      • Ingestion time 进入Flink系统的时候
      • Processing time 处理时间
  • 4.2 Flink中哪些时间比较重要呢?
    • 在 Flink 的流式处理中,绝大部分的业务都会使用 eventTime,一般只在
      eventTime 无法使用时,才会被迫使用 ProcessingTime 或者 IngestionTime。
  • 4.3 设置Event Time
StreamExecutionEnvironment env = 
StreamExecutionEnvironment.getExecutionEnvironment
// 从调用时刻开始给 env 创建的每一个 stream 追加时间特征
env.setStreamTimeCharacteristic(TimeCharacteristic.EventTime)

  • 4.4 如果按照事件发生的时间作为时间窗口 处理数据 会有什么问题?

数据在网络中分布式传输 可能由于先发送的事件后到,所以在处理数据的时候可能会丢或者处理多余数据。例如一下图 以事件发生时间5s开一个窗口, 事件时间是5s的时候 准备关闭窗口 输出结果时,但是由于网络传输的原因 3 和2 的数据还没有接受。此时关闭窗口 那么就2 和 3 的窗口就不会被处理。

  • 4.5 为了解决迟到数据 引入了watermark的概念
    • 设置一个延迟触发时间 watemark 每次系统会校验已经到达的数据中最大的 maxEventTime,然后认定 eventTime小于 maxEventTime - t 的所有数据都已经到达,如果有窗口的停止时间等于maxEventTime – t,那么这个窗口被触发执行。
  • 4.6 watermark 就一定能保证延迟的数据不影响最终结果吗?

假如窗口已经关闭了 此时又来了 属于该窗口的数据,那么此时数据将被丢弃掉 印象最终的结果。为了解决这种问题,所以可设置窗口延迟关闭时间,当窗户到达设置的窗口时间大小后,输出结果 但是并不关闭窗口,在一定的延迟时间内,如果有该窗口的数据 每来一条 处理一条。如果没有延迟窗口没有兜住,那么就将结果扔到侧输出流中.

  • 4.5
    • 设置一个一延迟触发时间 watemark 每次系统会校验已经到达的数据中最大的 maxEventTime,然后认定 eventTime小于 maxEventTime - t 的所有数据都已经到达,如果有窗口的停止时间等于maxEventTime – t,那么这个窗口被触发执行。
  • 4.6 watermark的特点
    • watermark 必须单调递增,以确保任务的事件时间时钟在向前推进,而不是在后退
    • watermark 与数据的时间戳相关
  • 4.7 watermark的传递
    • 取当前分区中 最小的watermark广播给下游
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/652468.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号