Flink的架构
Flink框架是一个针对于有界和无界数据流状态计算的分布式处理引擎。Flink运行在常见的集群环境中,以内存速度和任意规模执行计算
在这里,我们介绍关于Flink架构的重要方面
处理无界和有界的数据
任何类型的数据都可以看作信息流。信用卡的交易信息,传感器的测量数据,机器的日志或者是用户在网页或者移动应用中的交互,产生所有的数据都被看作是流
数据可以被当做无界和有界流来处理。
1.无界流有一个起点但是没有终点。他们不会终止并且当产生的时候就可以提供数据。无界流必须被持续的处理。例如:事件必须在他们被接收后及时的处理。不可能等待所有的输入数据都到达因为输入是无界的并且在任何时间点都不是完整的。处理无界数据总是要求事件被接收以一种特定的次序,例如事件产生的次序,能够推断结果的完整性。
2.有界流有规定的起点和终点。有界流能够在执行其他运算之前通过摄取所有的数据来处理。处理有界流并不要求按次序摄取,因为一个有界的数据集张总能够被排序。处理有界流被认为是批处理。
Apache Flink擅长处理无界和有界的数据集。精确的控制时间和状态使得Flink的运行时能够在无界流上运行各种类型的应用。有界流可以通过算法和数据结构内部处理,这些算法和数据结构专门针对固定大小的数据集而设计,从而拥有出色的性能。
通过探索建立在Flink之上的一些应用场景可以让你感受到Flink的魅力!
随处都可以部署应用
Apache Flink 是一个分布式系统并且为了执行应用请求计算资源。Flink融合了所有的常见集群资源管理器像Hadoop YARN,Apache Mesos,以及Kubernetes,并且也可以建立单机运行。
Flink旨在很好的兼容前面列出来的每一个资源管理器。这是通过特定的资源管理部署模型实现的,他运行Flink和每一个资源管理器用它惯用的方式去交互。
当部署一个Flink应用时,Flink自动识别基于应用配置从资源管理器请求需要请求的资源。当失败的时候,Flink通过请求新的资源来代替失败的容器。所有的提交或者控制应用的通信方式通过REST的调用。这样方便了在多种环境中整合Flink
在任何规模运行应用
Flink可以执行任何规模的流状态应用。应用程序并行化成数千个分布式并且在一个集群中同时被执行的任务。因此,一个应用能够实质上可以利用无限量的CPU、主内存、磁盘和网络IO。而且Flink很容易保持非常大的应用状态。它的异步和增量检查点算法确保了对延迟的影响最小同时保证了一次性状态一致性。
用户报告了在其生产环境中运行的Flink应用程序的可扩展性数字,像
- 应用处理每天数万亿的事件
- 应用维持TB量级的状态
- 应用运行在数千个核心上
利用内存中的性能
有状态Flink应用程序针对本地状态访问进行了优化。任务状态始终保持在内存中,如果状态大小超过可用内存,则保存在访问高效的磁盘数据结构中。
因此,任务通过访问本地(通常是内存中)状态来执行所有计算,从而产生非常低的处理延时。Flink通过定期和异步检查点到持久化存储来保证在出现故障时的一次状态一致性。