实时流计算近几年由于数据被广泛重视,是通过实时推荐及计算来获取目标数据而兴起的技术。本文对分布式实时计算引擎Flink做了简要介绍。本文选自《智能运维:从0搭建大规模分布式AIOps系统》一书。
流式计算处理的业务特点是数据的价值随着时间的流逝而降低,所以提高数据的处理速度及实时性是极其重要的。例如,用户在浏览微博时插入了Feed广告,我们需要对所插入广告的曝光、互动、负反馈等信息进行及时的反馈,这时就需要流式计算。
Flink是一个针对流数据和批数据的分布式处理引擎,主要用Java代码实现。对于Flink ,其处理的数据主要是流数据,批数据只是流数据的一个极限特例而已。Flink的批处理方式采用的是流式计算原理,这一点跟Spark的设计思想正好相反(Spark Streaming本质上是批处理,只是将计算分成了很小的单元,近似成流计算),这也是Flink的最大特点。目前使用Flink的公司有阿里巴巴、Uber等。
基本概念
1.数据集
数据集(DataSet)分为有界数据集和无界数据集。无界数据集的数据会源源不断地流入,有界数据集的数据是不可变的。许多传统上被认为是有界或“批”数据的真实数据集实际上是无界数据集。无界数据集包括但不限于:与移动或Web应用程序交互的最终用户、提供测量的物理传感器、金融市场、机器的日志数据。
2.执行模型
实时处理是指当数据正在生成时连续执行的数据的处理过程。批处理是指在有限的时间内执行有限的数据的处理过程。不管采用哪种类型的执行模型来处理数据都是可以的,但却不一定是最优的。例如,批处理一直被应用于无界数据集的处理上,尽管它存在窗口、状态管理和次序错误等潜在问题。Flink采用实时处理的执行模型,在数据处理精度和计算性能方面都有更大的优势。