Apache Flink 是一个框架和分布式解决引擎,用于在无边界和有边界数据流上进行有状态的计算。Flink 能在所有常见集群环境中运行,并能以内存速度和任意规模进行计算。
接下来,咱们来介绍一下 Flink 架构中的重要方面。
解决无界和有界数据
任何类型的数据都能够造成一种事件流。信用卡交易、传感器测量、机器日志、网站或挪动应用程序上的用户交互记录,所有这些数据都造成一种流。
数据能够被作为 无界 或者 有界 流来解决。
1.无界流 有定义流的开始,但没有定义流的完结。它们会无休止地产生数据。无界流的数据必须继续解决,即数据被摄取后须要立即解决。咱们不能等到所有数据都达到再解决,因为输出是有限的,在任何时候输出都不会实现。解决无界数据通常要求以特定程序摄取事件,例如事件产生的程序,以便可能推断后果的完整性。
2.有界流 有定义流的开始,也有定义流的完结。有界流能够在摄取所有数据后再进行计算。有界流所有数据能够被排序,所以并不需要有序摄取。有界流解决通常被称为批处理。
Apache Flink 善于解决无界和有界数据集 准确的工夫管制和状态化使得 Flink 的运行时(runtime) 可能运行任何解决无界流的利用。有界流则由一些专为固定大小数据集非凡设计的算法和数据结构进行外部解决,产生了杰出的性能。
通过摸索 Flink 之上构建的 用例 来加深了解。
部署利用到任意中央
Apache Flink 是一个分布式系统,它须要计算资源来执行应用程序。Flink 集成了所有常见的集群资源管理器,例如 Hadoop YARN、Apache Mesos 和 Kubernetes,但同时也能够作为独立集群运行。
Flink 被设计为可能很好地工作在上述每个资源管理器中,这是通过资源管理器特定 (resource-manager-specific) 的部署模式实现的。Flink 能够采纳与以后资源管理器相适应的形式进行交互。
部署 Flink 应用程序时,Flink 会依据应用程序配置的并行性主动标识所需的资源,并从资源管理器申请这些资源。在产生故障的状况下,Flink 通过申请新资源来替换产生故障的容器。提交或控制应用程序的所有通信都是通过 REST 调用进行的,这能够简化 Flink 与各种环境中的集成。
运行任意规模利用
Flink 旨在任意规模上运行有状态流式利用。因而,应用程序被并行化为可能数千个工作,这些工作散布在集群中并发执行。所以应用程序可能充分利用无尽的 CPU、内存、磁盘和网络 IO。而且 Flink 很容易保护十分大的应用程序状态。其异步和增量的检查点算法对解决提早产生最小的影响,同时保障准确一次状态的一致性。
Flink 用户报告了其生产环境中一些令人印象粗浅的扩展性数字
- 解决 每天解决数万亿的事件,
- 利用保护 几 TB 大小的状态, 和
- 利用 在数千个内核 上运行。
利用内存性能
有状态的 Flink 程序针对本地状态拜访进行了优化。工作的状态始终保留在内存中,如果状态大小超过可用内存,则会保留在能高效拜访的磁盘数据结构中。工作通过拜访本地(通常在内存中)状态来进行所有的计算,从而产生非常低的解决提早。Flink 通过定期和异步地对本地状态进行长久化存储来保障故障场景下准确一次的状态一致性。
原文链接:https://flink.apache.org/zh/flink-architecture.html