Flink 是什么?
Apache Flink 是一个分布式处理引擎,在有界或无界数据流上进行有状态的计算。Flink可以在所有通用的集群环境上运行,并且可以以内存级的速度进行大批量的计算。
Flink的流计算
任何类型的数据都可以形成一种事件流。信用卡交易、传感器测量、机器日志、网站或移动应用程序上的用户交互记录,所有这些数据都形成一种流。数据可以被作为无界或者有界流来处理。
无界流
有定义流的开始,但没有定义流的结束。它们会无休止地产生数据。无界流的数据必须持续处理,即数据被摄取后需要立刻处理。我们不能等到所有数据都到达再处理,因为输入是无限的,在任何时候输入都不会完成。处理无界数据通常要求以特定顺序摄取事件,例如事件发生的顺序,以便能够推断结果的完整性。
有界流
有定义流的开始,也有定义流的结束。有界流可以在摄取所有数据后再进行计算。有界流所有数据可以被排序,所以并不需要有序摄取。有界流处理通常被称为批处理
Apache Flink 擅长处理无界和有界数据集。精确的时间控制和状态化使得 Flink 的运行时能够运行任何处理无界流的应用。有界流则由一些专为固定大小数据集特殊设计的算法和数据结构进行内部处理,产生了出色的性能。
Flink的迭代运算
所谓迭代运算,就是给定一个初值,用所给的算法公式计算初值得到一个中间结果,然后将中间结果作为输入参数进行反复计算,在满足一定条件的时候得到计算结果。迭代计算通常是数据挖掘和机器学习算法的核心部分,在各类应用中都普遍存在。在搜索领域,由Google提出的著名的网页排序算法PageRank,其核心思想就是根据网络之中不同网页之间的链接关系进行迭代计算,最终的排名即是迭代最终收敛的值或重要性;在社交网络领域,很多好友推荐算法都是通过利用现有用户的好友关系网络图通过迭代计算来挖掘用户之间可能存在的潜在链接关系。Flink 支持本地的快速迭代,以及一些环形的迭代任务。