一文读懂流式计算框架Flink( 二 )

在Transformation模块,DataStream提供了诸如map、FlatMap、Filter、Reduce、KeyBy这些函数,我个人感觉Flink的这些接口使用起来还是比较方便的,比如要把下面这个二元组类型的数据都+1,
只需要使用map函数作如下处理:
流式编程的时间概念与Watermark流式开发和离线开发的最大区别在于对于数据时间的理解上,离线开发针对的都是有边界数据,有边界的意思是在开发过程中会用到的数据是有限的 。而流式应用,因为数据是实时流入的,所以对应的数据是无边界的 。以机器学习算法为例,经常需要缓冲一部分数据求区间内的最大值和最小值,那么在无边界数据条件下如何处理呢?这里就应用到了watermark功能 。
首先介绍下几个时间的概念:

  • Event Time是数据在业务方的真实发生时间,比如某个手机在2019-03-05下午2点被购买,这个时间就是Event Time
  • Ingestion Time指的是数据进入Flink系统的时间,理论上会比Event Time晚一点
  • Processing Time:数据在当前系统被处理的时间,也就是Flink worker机器的时间,这个是Flink系统的默认时间
所以从概念层面理解,用Flink去处理业务最合适的时间是Event Time,而系统默认使用Processing Time是一种简化方法,因为流式数据在录入Flink系统的过程中会出现时间乱序 。
接着介绍下Window和Watermark的概念,当系统按照Processing Time去流式处理数据的时候,假设某个流式算法需要缓冲5分钟的数据算一次Loss,这个5分钟就是一个Window窗口 。但是当5分钟已经结束了,还是没有数据流入计算引擎,这个时候怎么办?接着等还是执行下一个操作 。这就用到了Watermark,当等待时间超过Watermark的设定时间,系统就会自动触发计算,无论数据是否满足Window的要求 。
一文读懂流式计算框架Flink

文章插图
 
?
写到做后本文是我学习了Flink的一些资料之后的笔记,可以作为对Flink框架的一个大体了解 。其实随着互联网业务的不断发展和计算框架的普及,后续各种广告推荐、商品推荐、金融风控相关的业务都会逐渐从传统的离线计算向流式计算转型 。未来Flink在数据业务领域大有可为,期待接下来产业计算的框架升级 。

【一文读懂流式计算框架Flink】


推荐阅读