Apache Flink是一个框架和分布式处理引擎,用于无边界和有边界数据流上进行有状态的计算。Flink能在所有常见的集群环境中运行,并能以内存速度和任意规模进行计算。
任何类型的数据都可以形成一种事件流。信用卡交易、传感器测量、机器日志、网站或移动应用程序上的用户交互记录,所有这些数据都形成一种流。
数据可以被作为无界或者有界流来处理:
Apache Flink擅长处理无界和有界数据,精确的时间控制和状态化使得 Flink 的运行时(runtime)能够运行任何处理无界流的应用。有界流则由一些专为固定大小数据集特殊设计的算法和数据结构进行内部处理,产生了出色的性能。
Apache Flink是一个分布式系统,它需要计算资源来执行应用程序。Flink 集成了所有常见的集群资源管理器,例如 Hadoop YARN、 Apache Mesos 和 Kubernetes,但同时也可以作为独立集群运行(Stand-alone)。
Flink 被设计为能够很好地工作在上述每个资源管理器中,通过指定资源管理器(resource-manager-specific)的部署模式实现。Flink 可以采用与当前资源管理器相适应的方式进行交互。
部署Flink应用程序时,Flink会根据应用程序配置的并行性自动标识所需的资源,并从资源管理器请求这些资源。在发生故障时,Flink 通过请求新资源来替换发生故障的容器。提交或控制应用程序的所有通信都是通过REST形式调用进行的,这可以简化Flink与各种环境中的集成。
Flink旨在任意规模上运行有状态流式应用。因此,应用程序被并行化为可能上千个任务,这些任务分布在集群中并发执行,所以应用程序能够充分利用无尽的CPU、内存、磁盘和网络I/O。而且 Flink 很容易维护非常大的应用程序状态,其异步和增量的检查点算法对处理延迟产生最小的影响,同时保证精确一次状态的一致性。
有状态的Flink程序针对本地状态进行了优化,任务的状态始终保存在内存中,如果状态大小超过可用内存,则会保存在能高效访问的磁盘数据结构中。任务通过访问本地(通常在内存中)状态来进行所有的计算,从而产生非常低的延迟。Flink通过定期和异步地对本地状态进行持久化存储来保证故障场景下精确一次的状态一致性。
内容来源于网络,如有侵权,请联系作者删除!