Apache Flink - 初探
是一个框架(framework)和分布式(distributed)处理引擎(处理大数据计算),用于对无界限(unbounded)和有界限(bounded)的数据流进行有状态(stateful)的计算。Flink 被设计为在所有常见集群(cluster)环境中运行,依靠内存数据和任意规模执行计算。
架构
处理无界和有界数据
任何类型的数据都是作为事件流产生的。比如:信用卡交易,传感器测量,机器日志或者网站、移动应用上用户交互,所有的这些数据都是通过流产生的。
数据可以作为有界或无界形式进行处理
无界流 有起点却无终点。在生成数据时已经开始提供数据流并且不会停止下来。无界(无限制)的数据流必须连续进行处理,即,时间必须在获取后立即处理。不可能等待所有输入数据到达,因为输入是无界的,并且在任何时间点都不会完成(结束)
有界流 有定义(声明好,确定好)的起点和终点。可以在执行任何计算之前提取所以数据来处理有界流。由于有界数据集始终可以进行排序,因此不需要有顺序摄取(提取)。绑定流的处理也称为批处理
图片来自官方
Apache Fink 擅长处理无界和有界的数据。精确的时间和状态控制使得 Flink 的运行时能够在无限制的流上运行任何类型的应用程序。有界流由专门为固定大小的数据集设计的算法和数据结构在内部进行处理,从而产生出色的性能。
任何地方都可以部署应用
Apache Flink 是一个分布式系统,需要计算资源才能执行应用程序。Flink 与所以常见的集群资源管理器集成,但也可以设置为作为独立集群运行。
Flink 旨在与之前列出的每个资源管理器配合使用。这是通过特定于资源管理器的部署模式实现的,该模式运行 Flink 以其惯用的方式与每个资源管理进行交互。
部署 Flink 应用程序时, Flink 会根据应用程序配置的并行性自动识别所需的资源,并向资源管理器请求。如果发生故障, Flink 会通过请求新资源来替换发生故障的容器。提交或控制应用程序的所有通信均通过 REST 调用进行。这简化了 Flink 在许多环境中的集成。
在任意规模运行应用程序
Flink 旨在运行任何规模的有状态流应用程序。应用程序被并行化为可能成千上万的任务,这些任务在集群分布并同时执行。因为,应用程序几乎可以利用无限数量的CPU,主内存,磁盘和网络IO。而且,Flink 易于维护非常大的应用程序状态,它的异步和增量检查点算法可确保对处理延迟的影响降至最低,同时保证一次状态一致性。
用户报告了在其生产环境中运行的 Flink 应用程序的可扩展性数字,例如:
- 每天处理数万亿事件的应用程序
- 维护多个TB状态的应用程序
- 以及在数千内核上运行的应用程序
利用内存性能
有状态 Flink 应用程序针对本地状态访问进行了优化。任务状态始终在内存中,或者,如果状态超出可用内存,则始终保持在访问有效的磁盘数据结构中。因此,任务通过访问通常在内存中的本地状态执行所有计算,从而产生非常低的处理延迟。Flink 通过定期将本地状态异步指向持久性存储,从而确保在故障情况下一次准确的状态一致性。
应用
Apache Flink 是用于无限制和有限制的数据流上的有状态计算的框架。Flink 在不同的抽象别提供了多个 API,并为常见用例提供了专用的库。
流应用程序的构建块
流处理框架可以构建并执行的应用程序类有框架控制流,状态和时间的程度定义。在下文中,我们将描述用于流处理应用程序的这些构建块,并说明 Flink 的处理方法。
Streams 流