Flink是一个开源的分布式,高性能,高可用,准确的流处理框架。主要由Java代码实现,支持实时流处理和批处理,批数据只是流数据的一个极限案例。支持了迭代计算,内存管理和程序优化。
重点记得Flink是一个流处理框架,支持实时处理。
Flink特点
图片的左边 是数据来源,右边是数据可以输出到什么地方
- 流式优先:Flink是一个流式处理框架,可以实现流式数据的连续处理
- 容错:有容错机制,可以保证数据有状态的计算,记录数据的状态,如果数据处理失败了,可以再恢复到原来的状态
- 可伸缩:可以支持上千个节点
- 性能:高吞吐,低延迟,高吞吐就是表示这个程序在单位时间内,可以达到很大的数据量处理,并且在很短的时间内处理掉。
Flink架构
Flink是一个分层次的系统。
- 部署层面上:可以单击,集群,云上部署,在工作中YARN场景比较多
- 核心层面上:有一个分布式的流式数据处理引擎
- API层面上:有流式处理API,批处理API。流式处理的支持事件处理,表操作。批处理的,支持机器学习,图计算,也支持表操作。
基本组件
看下Flink到底有哪些组件
- 首先要有数据源,负责接收数据
- 中间就是进行计算的部分,具体对数据处理的地方
- 最终数据输出的地方,把结果存储到某些地方
流处理与批处理
流处理系统与批处理系统最大不同在于节点间的数据传输方式,这两种数据传输模式是两个极端,对应的是流处理系统对低延迟的要求和批处理系统对高吞吐量的要求。
对于一个流处理系统,其节点间数据传输的标准模型是:当一条数据被处理完成后,序列化到缓存中,然后立刻通过网络传输到下一个节点,由下一个节点继续处理
而对于一个批处理系统,其节点间数据传输的标准模型是:当一条数据被处理完成后,序列化到缓存中,并不会立刻通过网络传输到下一个节点,当缓存写满,就持久化到本地硬盘上,当所有数据都被处理完成后,才开始将处理后的数据通过网络传输到下一个节点
Flink的执行引擎同时支持了这两种数据传输模型
Flink以固定的缓存块为单位进行网络数据传输,用户可以通过设置缓存块超时值指定缓存块的传输时机。如果缓存块的超时值为0,则Flink的数据传输方式类似上文所提到流处理系统的标准模型,此时系统可以获得最低的处理延迟
如果缓存块的超时值为无限大,则Flink的数据传输方式类似上文所提到批处理系统的标准模型,此时系统可以获得最高的吞吐量
同时缓存块的超时值也可以设置为0到无限大之间的任意值。缓存块的超时阈值越小,则Flink流处理执行引擎的数据处理延迟越低,但吞吐量也会降低,反之亦然。通过调整缓存块的超时阈值,用户可根据需求灵活地权衡系统延迟和吞吐量
最后
学习下大数据方面的知识,这里主要介绍了Flink的基本原理与使用场景