flink 官网翻译系列 (一) 什么是flink

原创 2019-06-16 02:34 阅读(75)次

先声明,这系列文章我除了自己翻译也会借鉴前人的翻译结果。主要是为了自己的学习和一些跟我一样不擅长英语的朋友学习。我很看好flink这个框架,因为他同时能做流计算和批处理,性能上优于其他对手。而且我判断整个行业正在从老数据(离线)的T+N的BI工作中走向对实时性要求更高的流计算倾斜。3-4年前就听说了flink,一直因为各种原因没有好好学习。

这是本系列的第一篇。https://flink.apache.org/flink-architecture.html  官网原文地址。


Apache Flink是一个能在有界和无界数据流上进行有状态计算的框架和分布式处理引擎。Flink被设计为在所有常见的集群环境中运行,在任何规模中仍能以内存速度执行计算。
下面,我们会向您介绍Flink架构中重要的概念。

处理有界和无界的数据 

       任何类型的数据都可以看作是事件流。信用卡交易,传感器的测量,机器的日志,或者一个用户在手机应用或网站上的交互数据,所有这些数据都可以生成流。

数据可以根据是区分为有界流或者无界流来进行相应的处理。

        无界数据流 有起点但是没有终点。它不会中断,并且随数据的产生而一直持续下去。无界数据流必须持续地进行处理。例如:事件必须在它被获取到后立即处理。因为输入流是无界的数据流,且在任何时间都不会结束,所以不可能等到所有的输入数据都到达后再处理。处理无界数据流一般会要求按某种顺序来获取到数据,例如按事件发生的顺序排序,这样才能够保证计算结果的完整性。

       有界数据流 既定义了起点也定义了终点的数据。有界数据流可以等待所有数据都加载完之后再进行计算处理。因为一个有界的数据集可以在加载后随时被排序,所以处理有界数据流不会要求获取的数据是排好序的。处理有界数据流也被称作批处理。

 


无论是有界数据集还是无界数据流,Apache Flink都很擅长处理。对时间与状态的精确控制,使得Flink的运行时能够在无界数据流上运行各种类型的应用程序。而在有界数据流的处理上,flink通过专为固定大小的数据集设计的算法和数据结构,进行内部处理同样表现优异。

可以通过查阅在Flink之上构建的用户案例来证明以上所诉。

flink可以部署在多种集群上(Deploy Applications Anywhere)

        Apache Flink 是一个分布式系统,为了执行应用程序Flink需要有计算资源。Flink能够很好的与常见的集群资源管理器集成,如:Hadoop YARN, Apache Mesos, 与Kubernetes,同时也可以设置为stand-alone集群模式来启动。

        Flink被设计为能够很好的与上面所列的资源管理器共同工作,这是通过特定的资源管理器(resource-manager-specific)的部署模式实现的,该模式允许Flink以其惯用的方式与每个资源管理器交互。
        当部署一个Flink应用时,Flink能根据应用所配置的并发数(parallelism )自动的识别所需资源,并向资源管理器请求这些资源。一旦发生故障,Flink会请求一个新资源来替换出故障的容器。提交或控制应用程序都是通过REST请求完成的,这使得Flink能够很容易集成在其他环境中。

       以任何规模运行应用(Run Applications at any Scale)

       Flink被设计为在任何规模下都能够运行有状态的流应用。应用可能被分解到数千个并行的task中,这些task在集群中是分布式且并发执行的。因此一个应用实际上可以利用无限的cpu,内存,硬盘以及网络I/O资源。而且,Flink也可以很容易的维持一个非常大的应用状态。它的异步且增量的检查点算法,确保对处理延迟的影响最小,同时保证一次性状态一致性。

       从已知的用户报告了解到,在其生产环境中运行的Flink应用程序有一些令人印象深刻的可扩展性数字,例如

应用程序每天处理数万亿个事件,
应用程序维护多个TB的状态,以及运行在数千个核心上的应用程序


        利用内存中性能 (Leverage In-Memory Performance)

        有状态Flink应用程序针对本地状态访问进行了优化。任务状态通常保留在内存中,如果状态大小超过可用内存,则保存在访问高效的磁盘上数据结构中。 因此,任务通过访问本地(通常是内存中)状态来执行所有计算,从而产生非常低的处理延迟。 Flink通过定期和异步地将本地状态检查点到持久存储,来保证在出现故障时的状态一致性。


完。

上一篇:MEC介绍