Flink的Time 和 Window(1)

Time

无论离线还是实时处理数据时,尤其时实时处理数据中,时间是数据计算中非常重要的一种元素或维度,Flink中基于时间的流处理就是对有状态流处理的一种扩展,很多场景都是基于时间:

  • 当进行时间序列分析
  • 基于特定时间段(通常称为窗口)进行聚合
  • 基于某事件发生时刻进行事件处理
  • 判断数据流中的数据是否有延迟

三种时间

Flink的DataStream有大量基于Time的Operator,比如:基于时间的Windows,延迟数据处理等
Flin提供三种时间:

  • Event Time: 事件发生的时间,指事件(数据)在其生产设备上产生时的时间,即在进入Flink之前就已经存在,可以从Event的字段中抽取,理想情况下,EventTime能让数据处理一定是准确的,能更好反映现实。
    事件时间是根据事件实际发生的时间来定义的。在处理事件时间时,通常会从数据中提取事件时间戳,并基于这些时间戳来划分和计算窗口。
  • Processing Time:处理消息的时间,指数据被相应Opertor执行时机器的系统时间
    处理时间是 Flink 系统处理事件的时间,即事件进入 Flink 系统的时间。处理时间窗口是基于 Flink 系统时钟来定义和计算的。
  • Ingestion Time: 进入到系统的时间,指数据进入到Flink的Source端时的系统时间。

三种时间比较

时间优点缺点场景
EventTime确定性好,即乱序,延时,或者数据重放等情况,都能给出正确的结果处理无序事件时性能和延迟受到影响。要求数据有延迟和乱序还要正确处理,即对结果要求极高
ProcessTime无需从Event中提取和解析,指定该Time形式时自动生成;性能和延迟都比EventTime好不能处理无序事件和延迟数据。对结果正确性要求不高的应用
IngestionTime无需指定,自动生成Time不能处理无序事件和延迟数据一般少用

性能,延迟和正确性比较:
性能:ProcessingTime > IngestTime > EventTime
延迟:ProcessingTime < IngestTime < EventTime
正确性: EventTime > IngestTime >= ProcessingTime
注意

  1. 不同的时间语义有不同的应用场合
  2. 往往更关心事件时间(Event Time)
  3. Flink从1.12开始,默认使用EventTime。1.12之前默认使用Processtime。

Window

窗口是处理实时流的核心,它将无界流分割成有界流上进行计算

窗口场景

  1. 做最近一段时间,每隔一段时间,最近多少条数据等的统计
  2. 实时计算结果对实时性要求不高,也可以使用窗口
  3. 数据乱序,延迟等处理使用窗口

窗口分类

Flink的窗口支持时间驱动和技术驱动

  1. 时间窗口(Time Window):按照时间生成Window
    • 滚动时间窗口(Tumbling Window
    • 滑动时间窗口(Sliding Window
    • 会话窗口 (Session Window
  2. 计数窗口(Count Window):按照指定的数据条数生成一个Window,与时间无关
    • 滚动计数窗口
    • 滑动计数窗口
  3. 全局窗口(Global Windows):只支持自定义触发器才生效
    注意
  • 窗口范围都是左包右不包
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值