Apache Flink


大数据计算框架和分布式处理引擎,
互联网设备服务等激增的时代 产生的数据量 各种业务场景大量的数据产生 如何对数据有效处理是企业需要考虑的问题
Flink设计为运行在所有常见的集群环境中,且以内存速度和任意规模执行计算
任何类型的数据都是作为事件流产生的。信用卡交易事务,传感器测量,机器日志以及网站或移动应用程序上的用户交互行为,所有这些数据都生成流。

Apache软件基金会开发的开源流处理框架
Apache Flink核心用Java和Scala编写的分布式流数据流引擎
Flink以数据并行和流水线方式执行任意流数据程序
Flink流水线运行时系统可执行批处理和流处理程序
Flink的运行时本身也支持迭代算法的执行
Apache Flink用于对无界和有界数据流进行有状态计算
针对数据流的分布式计算提供了数据分布、数据通信以及容错机制等功能
基于流执行引擎,Flink提供了诸多更高抽象层的API以便用户编写分布式任务
DataSet API, 对静态数据进行批处理操作,将静态数据抽象成分布式的数据集,
用户可以方便地使用Flink提供的各种操作符对分布式数据集进行处理,支持Java、Scala和Python。
DataStream API,对数据流进行流处理操作,将流式的数据抽象成分布式的数据流,用户可以方便地对分布式数据流进行各种操作,支持Java和Scala。
Table API,对结构化数据进行查询操作,将结构化数据抽象成关系表,并通过类SQL的DSL对关系表进行各种查询操作,支持Java和Scala。

处理无边界和有边界数据
数据可作为无边界或有边界流处理
无边界流
定义了开始但没有定义结束
不会在生成时终止提供数据
必须持续地处理无边界流,即必须在拉取到事件后立即处理它。
无法等待所有输入数据到达后处理,因为输入是无边界的,且在任何时间点都不会完成。
处理无边界数据通常要求以特定顺序(例如事件发生的顺序)拉取事件,以便能够推断结果完整性。
有边界流
定义了开始和结束
可在执行任何计算之前通过拉取到所有数据后处理有界流
处理有界流不需要有序拉取,因为可以随时对有界数据集进行排序
有边界流的处理也称为批处理
Apache Flink擅长处理无边界和有边界数据集
在事件和状态上的精确控制使得Flink运行时能在无边界流上运行任意类型的应用程序
有界流由算法和数据结构内部处理,这些算法和数据结构专门针对固定大小的数据集而设计
从而获得优秀的性能
随处部署应用程序
Apache Flink是个分布式系统,需要计算资源才能执行应用程序。
Flink与所有常见的集群资源管理器(如Hadoop YARN,Apache Mesos和Kubernetes)集成,
但也可以作为独立集群运行
Flink旨在很好地适用于之前列出的每个资源管理器
这是通过特定于资源管理器的部署模式实现的,这些模式允许Flink以其惯用的方式与每个资源管理器进行交互
部署Flink应用程序时,Flink会根据应用程序配置的并行度自动识别所需资源,
并从资源管理器请求它们。
如果发生故障,Flink会通过请求新的资源来替换发生故障的容器。
提交或控制应用程序的所有通信都通过REST调用进行。
这简化了Flink在许多环境中的集成
任意规模运行应用程序
Flink旨在以任意规模运行有状态流式应用程序。
应用程序可并行化为数千个在集群中分布和同时执行的任务。
因此,应用程序可以利用几乎无限量的CPU,内存,磁盘和网络IO
且Flink可轻松维护非常大的应用程序的状态。
其异步和增量检查点算法确保对延迟处理的影响最小,同时保证精确一次的状态一致性。
用户报告在其生产环境中运行的Flink应用程序的扩展数字令人印象十分深刻例如
应用程序每天处理数万亿个事件
应用程序维护数个TB的状态
应用程序在数千个CPU核上运行
利用内存的性能
有状态的Flink应用程序针对本地状态访问进行了优化。
任务状态始终驻留在内存中,或如果状态大小超过可用内存,
则保存在访问高效的磁盘上的数据结构中。
因此,任务通过访问本地(通常是内存中)状态来执行所有计算,从而产生非常低的处理延迟。
Flink通过定期和异步检查点将本地状态到持久存储来保证在出现故障时的精确一次的状态一致性。


What is Apache Flink? — Applications
//flink.apache.org/flink-applications.html

Apache Flink官方文档中文版--Flink是什么?
//blog.51cto.com/1196740/2235482

一文弄懂Flink基础理论
//blog.csdn.net/oTengYue/article/details/102689538