flink框架初探
未来的数据处理模式?
过去理解数据的角度来看,数据可分为实时流式数据和历史静态数据,比如用户实时点击行为属于实时流式数据,而过去30天销量属于历史静态数据,两者一定程度上是割裂的,基于这种划分思想,流式数据用流式计算框架(storm等)搞,历史静态数据用批处理框架(hadoop)搞,提出了大数据lambada框架(图片来源于http://lambda-architecture.net/)
但存在的问题有:
- 同一计算逻辑两套编码(如计算某网站用户uv,可能存在实时java代码撸一遍,历史代码hive sql写一遍)
- 需要两种角色工程师来加工数据
- ... ...
随着spark提出,将批处理和流式处理融合到了统一框架,但是spark本质还是基于微批处理,在解决实时计算上也存在延时的问题
有状态流计算架构flink提出,解决了上述问题;其计算过程产生的中间结果,都会保存到内存或文件系统中,下一次计算从中间结果再次进行计算,我们可以想下这样带来的好处,比如统计某网站uv,我们需要截止当前、截止昨天不同时间窗口数据,我们都很容易的计算得到,而不需要再依赖批处理框架获取,真正实现流批一体。
flink的优势在于:
- 能同时支持高吞吐、低延迟、高性能,延迟可做到ms级别
- 支持有状态计算
- 灵活的窗口操作
- 数据一致性保证
- 流批一体化
因此,流批一体化是数据处理大势所趋,未来几年将革新搞大数据人的数据处理模式。
flink框架
基础概念
推荐阅读:https://flink.apache.org/flin...
Apache Flink is a framework and distributed processing engine for stateful computations over unbounded and bounded data streams
关键词有两点:
- unbounded and bounded data
任何数据都是事件流产生的,都可以当做流式数据,有界的流式数据或者无界的流式数据 - stateful computations
这里有状态计算,我的理解是当前的计算跟前一步或前几步的计算结果有关,比如计算某网站uv,这一秒肯定跟前一秒的结果相关,基于前一秒的结果来进行计算
重点请看这句官网https://flink.apache.org/flin... 说明;
Every non-trivial streaming application is stateful, i.e., only applications that apply transformations on individual events do not require state. Any application that runs basic business logic needs to remember events or intermediate results to access them at a later point in time, for example when the next event is received or after a specific time duration.