Apache Flink 是什么?我们来看一下官方的解释。
Apache Flink 是一个框架和分布式处理引擎,用于在无边界和有边界数据流上进行有状态的计算。Flink 能在所有常见集群环境中运行,并能以内存速度和任意规模进行计算。
这里面有几个内容要划重点:
一是Flink是一个分布式计算引擎,用于计算的引擎(用于计算,用于计算,用于计算,重要的事情说三遍),并不是存储引擎。
二是用在无界和有界数据流的有状态计算,这里面又包含三个概念:无界数据流、有界数据流、有状态计算。
还是来看官方解释:
数据可以被作为 无界 或者 有界 流来处理。
无界流:有定义流的开始,但没有定义流的结束。它们会无休止地产生数据。无界流的数据必须持续处理,即数据被摄取后需要立刻处理。我们不能等到所有数据都到达再处理,因为输入是无限的,在任何时候输入都不会完成。处理无界数据通常要求以特定顺序摄取事件,例如事件发生的顺序,以便能够推断结果的完整性。
有界流:有定义流的开始,也有定义流的结束。有界流可以在摄取所有数据后再进行计算。有界流所有数据可以被排序,所以并不需要有序摄取。有界流处理通常被称为批处理
有状态计算是什么意思呢?这里的重点是“有状态”,在Flink的一次计算过程中,本次计算会用到一些外部的数据,Flink能够存储这些外部数据在本地,提供计算使用,从而避免去外部额外查询这些额外的数据,保存这些额外数据的能力就是“有状态的”。
三是能以内存速度和任意规模进行计算。
这就很体现Flink的能力了,一是体现了计算的速度之快,二是体现了能够支持计算的规模之大。
利用内存性能
有状态的 Flink 程序针对本地状态访问进行了优化。任务的状态始终保留在内存中,如果状态大小超过可用内存,则会保存在能高效访问的磁盘数据结构中。任务通过访问本地(通常在内存中)状态来进行所有的计算,从而产生非常低的处理延迟。Flink 通过定期和异步地对本地状态进行持久化存储来保证故障场景下精确一次的状态一致性。
运行任意规模应用
Flink 旨在任意规模上运行有状态流式应用。因此,应用程序被并行化为可能数千个任务,这些任务分布在集群中并发执行。所以应用程序能够充分利用无尽的 CPU、内存、磁盘和网络 IO。而且 Flink 很容易维护非常大的应用程序状态。其异步和增量的检查点算法对处理延迟产生最小的影响,同时保证精确一次状态的一致性。
比如Flink用户报告的一些数据:
1)每天处理数万亿的事件
2)应用维护几TB大小的状态
3)应用在数千个内核上运行
到这里,Flink是什么已经有了一个简单的认识,Flink中还有很多的概念和知识点,将在后续陆续介绍。
本套课程以Flink 1.14.3为例进行讲解,在编写期间,于2022年4月,Flink推出了Flink 1.14.4版本,整体上1.14.3和1.14.4 API差别不是很大,本套课程后续会继续以1.14.3进行演示。
本套课的侧重点在代码端,在讲解概念和应用的同时,重点演示了最新API的各种代码使用,你会看到非常详细的基于Flink 1.14.3 API的各种代码和演示,整个课程同时也是一个小白从入门到实战的过程。
简单来说本套课程一是演示了最新的Flink API的使用方式,二是从一个小白的角度循序渐进入门Flink。
除了从本站的Flink本套课程学习,还推荐两个学习网站,Apache Flink官网和极客时间的《Flink核心技术与实战》的课程。官网的内容比较零散,没有组织成一套学习的知识线,但知识点讲的透彻。极客时间的课程比较系统,但是需要付费,并且讲解的节奏也比较快,个人觉得如果你是已经有大数据经验的开发者,要增加Flink的技能,推荐极客时间学习。