Apache Flink-什么是Apache Flink?

    Apache Flink是一个用于在有界和无界数据之上进行状态计算的分布式处理引擎和框架。其被设计出可以运行在所有常见的集群环境中,在任何规模之上进行内存计算。

   下面,让我了解一下Flink架构的一些重要特性。

处理有界和无界数据

    任何类型数据的都可以看成像事件流一样产生,信用卡交易数据,传感器测量数据,机器日志以及网站上用户交互数据和手机应用数据,所有这些数据都可以当成流一样产生。

    数据可以被当成有界流和无界流处理。

1.无界的流,有一个开始但是没有定义结束,一旦生成数据就不会终止。无界流必须要持续处理,也就是事件被摄取后必须立即处理。不可能等到所有的数据到达再处理因为输入没有边界而且在任何时间内都不可能全部到达。处理无边界数据通常情况下需要事件以指定的顺序摄入,例如,以事件发生时作为顺序,使得能够保证结果的完整性。

2.有边界的流,有一个确定的开始和结束,在进行任何计算前,边界流数据可以对摄入的所有数据进行处理。处理边界流数据不必保证摄入数据的有序性因为边界流数据可以被存储。对边界流数据的处理通常也称之为批处理。

Apache Flink擅长处理边界和无边界数据集。 对时间和状态的精确空控制使得Flink可以运行无边界流上的各种应用程序,边界流内部被设计成为固定大小的数据集通过算法和数据结构处理,表现处了极佳的性能。

为方便自己使用可以浏览已经构建在Flink上的用户案例。

随处部署应用

Apache Flink是一个分布式系统,它需要计算资源以执行应用程序,Flink可以和所有通用的集群资源管理器如Hadoop YARN, Apache Mesos, 和 Kubernetes集成,但是也可以作为单独的集群运行。

Flink被设计成在之前列出的资源管理器上工作的很好,这得益于"资源管理器指定"的部署模式,它允许Flink和每个资源管理器以其习惯的方式进行交互。

当部署一个Flink应用程序,Flink可以根据应用配置的并行度自动识别出所需要的资源并从resource manger请求资源,为了防止失败,Flink通过请求新的资源来替换失败的container,对应用程序的提交及控制的所有信息交互都是通过REST调用完成,使得Flink可以简便和各种环境集成。

任意规模运行应用程序

Flink被设计成在任何规模上运行有状态的流式应用程序,应用程序可以有上千个并行任务,他们被分布在集群中并发执行。因此,一个应用程序可以使用无限制的CPU,主存,磁盘和网络IO。此外,Flink易于维护超大应用状态。其异步和增量检查点算法保证处理低延迟时的最小影响也保证"正好一次"状态的一致性。

用户报告了令人印象深刻的数字基于他们的生产环境运行的Flink应用程序,例如:

  • 应用每天处理数万亿的事件,
  • 应用维护数以TB的状态
  • 应用运行在上千个核之上

发挥内存优势

状态化的Flink应用程序被优化成本地状态访问。任务状态总是维护在内存中或者状态大小超出了可用的内存,在有效的访问的磁盘数据结构中。因此,任务通过访问本地数据执行所有的计算,通常在内存中,表现出非常低的处理延迟。Flink保证"正好一次"状态一致性通过周期性异步的检出本地状态到持久化存储以防止失败。

猜你喜欢

转载自blog.csdn.net/javajxz008/article/details/82986682