Flink零基础学习笔记(一):基础概念
一、Apache Flink的定义、架构和原理
Apache Flink是一个分布式大数据处理引擎,可以对有限数据流和无限数据流进行有状态或无状态的计算,能够部署在各种集群环境,对各种规模大小的数据以内存速度进行快速计算。
接下来我们介绍一下这些关键词的意义。
处理无界和有界数据
任何数据都能形成一种事件流。信用卡交易、传感器测量、机器日志、网站或移动应用程序上的用户交互记录,所有这些数据都形成一种流。
数据可以被定义为无界或者有界流来处理。
- 无界流 定义流的开始,但是没有定义流的结束。它们会无休止地产生数据。无界流的数据必须持续处理,即数据被摄取后需要立刻处理。我们不能等到所有数据都到达再处理,因为输入是无限的,在任何时候输入都不会完成。处理无界数据通常要求以特定的顺序摄取事件,例如事件的发生顺序,以便能够推断结果的完整性。
- 有界流 定义流的开始,也定义流的结束。有界流可以在摄取所有数据之后进行计算。有界流的所有数据可以被排序,所以并不需要有序摄取。有界流处理通常被称为批处理。
部署到任意地方
Apache Flink是一个分布式系统,它需要计算资源来执行应用程序。Flink集成了所有常见的集群资源管理器,例如Hadoop YARN、Apache Mesos和Kubernetes,但同时也可以作为独立集群运行。
Flink能够在上述每个资源管理器中很好地工作,这是通过资源管理器特定(resource-manager-specific)的部署模式实现的。Flink可以采用与当前资源管理器相适应的方式进行交互。
部署Flink程序时,Flink会根据应用程序配置的并行性自动标识所需的资源,并从资源管理器请求这些资源。在发生故障的情况下,Flink通过请求新的资源来替换发生故障的容器,这种自动故障恢复机制确保了Flink应用程序的高可用性。提交或控制应用程序的所有通信都是通过REST调用进行的,这可以简化Flink与各种环境中的集成。
REST(Representational State Transfer),即表述性状态转移。它要求每个资源都有一个唯一的标识符URI,通过HTTP协议提供一组操作来访问和操作资源。提交或控制Flink应用程序的所有通信都是通过REST调用进行的,这使得Flink与各种环境中的集成变得更加容易。例如,你可以通过REST调用从脚本或其他应用程序启动Flink应用程序,或者通过REST API监视和控制正在运行的应用程序。
总之,Flink的自动资源管理和自动故障恢复机制以及REST接口提供了一种高效、灵活和易于集成的方式来部署和管理Flink应用程序。
运行任意规模应用
Flink旨在任意规模上运行有状态流的应用。因此,应用程序被并行化为可能数千个任务,这些任务分布在集群中并发执行。从而应用程序能够充分利用集群中的CPU、内存、磁盘和网络IO。而且Flink很容易维护非常大的应用程序状态。而且Flink很容易维护非常大的应用程序状态。其异步和增量的检查点算法对处理延迟产生最小的影响,同时保证精确的一次状态的一致性。这使得Flink可以轻松处理大规模数据集,并且可以快速恢复到应用程序发生故障之前的状态。Flink 是一个高度可扩展且具有强大状态管理功能的流式计算框架,可以在各种规模的数据集上高效地运行。
- 每天处理数万亿事件
- 应用维护几TB大小的状态
- 应用在数千个内核上运行
利用内存性能
有状态的Flink程序针对本地状态访问进行了优化,以提高处理延迟并保证状态一致性。任务的状态始终保留在内存中,以便快速访问和计算。如果状态大小超过可用内存,则Flink会将其保存在能高效访问的磁盘数据结构中,这样可以最大限度减少访问磁盘的次数,从而提高处理性能。任务通过访问本地(通常在内存中)状态来进行所有的计算,从而产生非常低的处理延迟。Flink通过定期和异步地对本地状态进行持久化存储来保证故障场景下精确的一次的状态一致性。