对时间的处理(四)

目录

1 采用批处理架构和Lambda架构计数

2 采用流处理架构计数

3 时间概念

4 窗口

5 水印

6 参考


1 采用批处理架构和Lambda架构计数

批处理架构

 

1 数据被分割成一个个文件(例如按小时分割)

2 批处理作业以文件作为输入运行

存在的问题

  • 太多独立的部分

    为了计算数据中的事件数,这种架构动用了太多系统。每一个系统都有学习成本和管理成本,还可能存在 bug。

  • 对时间的处理方法不明确

  • 预警

    只有批处理作业做不到及时预警,需要引入Strom,增加了复杂性

  • 乱序事件流

    实际情况是事件经常乱序,本属于前一批的事件可能被错误地归入当前一批。批处理架构很难解决这个问题,大部分人则选择忽视它

  • 批处理作业的界限不清晰

Lambda架构

 

这种架构就是批处理作业+Strom流处理

 

2 采用流处理架构计数

是怎么样一种架构

 

1 消息传输系统 例如kafka作为流处理器的输入

和批处理相比有什么好处

1 Flink 作业的速度减慢或者吞吐量激增只会导致事件在消息传输系统中堆积。以时间为单位把事件流分割为一批批任务(称作窗口),这种逻辑完全嵌入在 Flink 程序的应用逻辑中

2 预警由同一个程序生成,乱序事件由 Flink 自行处理

3 固定时间分组改为根据产生数据的时间段分组,只需在 Flink 程序中修改对窗口的定义即可

4 如果应用程序的代码有过改动,只需重播 Kafka 主题,即可重播应用程序

3 时间概念

事件时间

每个事件与它相关的时间戳,它是数据记录的一部分

处理时间

处理事件的机器的测量时间

摄取时间

事件进入流处理框架的时间,有些事件缺乏真实的事件时间

Flink 允许用户根据所需的语义和对准确性的要求选择采用事件时间、处理时间或摄取时间定义窗口当采用事件时间定义窗口时,应用程序可以处理乱序事件流以及变化的事件时间偏差,并根据事件实际发生的时间计算出有意义的结果

4 窗口

窗口是什么

窗口是一种机制,用于将事件按照时间或者其他特征分组,每一组作为整体来分析

时间窗口

1 时间窗口支持滚动和滑动

2 一分钟滚动窗口收集最近一分钟的数值,并在一分钟结束时输出总和

 

一分钟滚动窗口的定义
stream.timeWindow(Time.minutes(1))

3 一分钟滑动窗口计算最近一分钟的数值总和,但每半分钟滑动一次并输出结果

 

每半分钟(即 30 秒)滑动一次的一分钟滑动窗口
stream.timeWindow(Time.minutes(1), Time.seconds(30))

计数窗口

计数窗口分组依据不再是时间戳,而是元素的数量

滚动和滑动的计数窗口分别定义
stream.countWindow(4)
stream.countWindow(4, 2)

会话窗口

会话指的是活动阶段,其前后都是非活动阶段,例如用户与网站进行一系列交互(活动阶段)之后,关闭浏览器或者不再交互(非活动阶段)。

在Flink 中,会话窗口由超时时间设定,即希望等待多久才认为会话已经结束。

如果用户处于非活动状态长达 5 分钟,则认为会话结束
stream.window(SessionWindows.withGap(Time.minutes(5))

5 水印

问题提出

当计算基于事件时间时,如何判断所有事件是否都到达,以及何时计算和输出窗口的结果呢

水印是什么

水印是嵌在流中的常规记录,计算程序通过水印获知某个时间点已到

水印生成

水印由应用程序开发人员生成

6 参考

《Flink基础教程》

如果你觉得文章还可以,欢迎点赞,评论,转发,收藏,关注哦!

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值