Flink学习22:窗口的划分

1.简介

主要有2种窗口,一个基于时间窗口,一个是基于数量窗口。

时间窗口中起止时间是,左闭右开

 

 

2.时间概念

2.1 事件生成时间

EventTime

指的是数据在设备上产生的时间。

这种模式下,不管数据何时到达或者顺序如何,都能得到一致的结果。

但是,在数据时间乱序的情况下,会产生一些延迟,性能会有影响。

ps: 1.12以后版本的flink,设置 事件时间窗口类型时(setStreamTimeCharacteristic )这个不需要设置,默认就是eventtime,

但是eventTime必须要设置水位线(assignTimestampsAndWatermarks,要指定时间字段),而基于处理时间的窗口processTime,不必须设置水位线。

2.2事件接入时间

Ingestion Time

指的是 数据接入flink的时间。

依赖算子所在主机的系统时钟。

接入时间位于,生成时间和处理时间之间。

事件接入时间模式,不能处理时间乱序和数据延迟问题。但是可以处理flink内部处理数据乱序问题。(该模式无法解决,数据到达flink之前,产生的乱序问题)

2.3事件处理时间

Processing Time

指的是算子在操作过程中,获取的主机时间。

该模式下,实时性最高。但是计算结果不一定准确。

主要用于计算精度不是很高,比如延时比较高的日志数据。

将事件时间和处理时间,进行区分,是flink的一大进步。(比如spark中是没有处理时间的,只有事件时间)

事件时间和处理时间的区别

 3.flink设置时间窗口模式

eg: 设置事件时间 EventTime(1.12以后版本的flink不需手动设置,默认就是EventTime)

import org.apache.flink.streaming.api.TimeCharacteristic
import org.apache.flink.streaming.api.scala.StreamExecutionEnvironment

object TimeWindowsTest {
  def main(args: Array[String]): Unit = {

    //create env
    val env = StreamExecutionEnvironment.getExecutionEnvironment

    //set the Event time windows
    env.setStreamTimeCharacteristic(TimeCharacteristic.EventTime)
    
    //set the processingTime
    env.setStreamTimeCharacteristic(TimeCharacteristic.ProcessingTime)

  }

}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值