版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
官方网址:https://flink.apache.org/
学习资料:https://flink-learning.org.cn/
目录
数据的时效性
日常工作中,我们一般会先把数据存储在表,然后对表的数据进行加工、分析。既然先存储在表中,那就会涉及到时效性概念。
如果我们处理以年,月为单位的级别的数据处理,进行统计分析,个性化推荐,那么数据的的最新日期离当前有几个甚至上月都没有问题。但是如果我们处理的是以天为级别,或者一小时甚至更小粒度的数据处理,那么就要求数据的时效性更高了。比如:
- 对网站的实时监控
- 对异常日志的监控
这些场景需要工作人员立即响应,这样的场景下,传统的统一收集数据,再存到数据库中,再取出来进行分析就无法满足高时效性的需求了。
流式计算和批量计算
上面说到的统一收集数据->存储到DB->对数据进行批量处理,就是我们说到的批量计算。而流式计算,顾名思义,就是对数据流进行处理,是实时计算
主要原理是:
- 与批量计算那样慢慢积累数据不同,流式计算立刻计算,数据持续流动,计算完之后就丢弃。
- 批量计算是维护一张表,对表进行实施各种计算逻辑。流式计算相反,是必须先定义好计算逻辑,提交到流式计算系统,这个计算作业逻辑在整个运行期间是不可更改的。
- 计算结果上,批量计算对全部数据进行计算后传输结果,流式计算是每次小批量计算后,结果可以立刻实时化展现。
- Batch Analytics,右边是 Streaming Analytics。Batch Analysis 就是传统意义上使用类似于 Map Reduce、Hive、Spark Batch 等,对作业进行分析、处理、生成离线报表
- Streaming Analytics 使用流式分析引擎如 Storm,Flink 实时处理分析数据,应用较多的场景如实时大屏、实时报表。
流式计算流程和特性
- 流程
1、提交流计算作业
2、等待流式数据触发流计算作业
3、计算结果持续不断对外写出 - 特性
1、实时,低延迟
2、无界,数据是不断输出无终止的
3、连续,计算连续进行,计算之后数据就会被丢弃
分布式计算引擎
这几年大数据的飞速发展,出现了很多热门的开源社区,其中著名的有 Hadoop、Storm,以及后来的 Spark,他们都有着各自专注的应用场景。Spark 掀开了内存计算的先河,也以内存为赌注,赢得了内存计算的飞速发展。Spark 的火热或多或少的掩盖了其他分布式计算的系统身影。就像 Flink,也就在这个时候默默的发展着。
在国外一些社区,有很多人将大数据的计算引擎分成了 4 代,当然,也有很多人不会认同。我们先姑且这么认为和讨论。
第1代——Hadoop MapReduce
首先第一代的计算引擎,无疑就是 Hadoop 承载的 MapReduce。它将计算分为两个阶段,分别为 Map 和 Reduce。对于上层应用来说,就不得不想方设法去拆分算法,甚至于不得不在上层应用实现多个 Job 的串联,以完成一个完整的算法,例如迭代计算。
- 批处理
- Mapper、Reducer
第2代——DAG框架(Tez) + MapReduce
由于这样的弊端,催生了支持 DAG 框架的产生。因此,支持 DAG 的框架被划分为第二代计算引擎。如 Tez 以及更上层的 Oozie。这里我们不去细究各种 DAG 实现之间的区别,不过对于当时的 Tez 和 Oozie 来说,大多还是批处理的任务。
- 批处理
- 1个Tez = MR(1) + MR(2) + … + MR(n)
- 相比MR效率有所提升
第3代——Spark(批为主、兼容流计算)
接下来就是以 Spark 为代表的第三代的计算引擎。第三代计算引擎的特点主要是 Job 内部的 DAG 支持(不跨越 Job),以及强调的实时计算。在这里,很多人也会认为第三代计算引擎也能够很好的运行批处理的 Job。
- 批处理、流处理、SQL高层API支持
- 自带DAG
- 内存迭代计算、性能较之前大幅提升
第4代——Flink(原生流计算,兼容批,实时即未来)
随着第三代计算引擎的出现,促进了上层应用快速发展,例如各种迭代计算的性能以及对流计算和 SQL 等的支持。Flink 的诞生就被归在了第四代。这应该主要表现在 Flink 对流计算的良好支持,以及更一步的实时性上面。当然 Flink 也可以支持 Batch 的任务,以及 DAG 的运算。
- 批处理、流处理、SQL高层API支持
- 自带DAG
- 流式计算性能更高、可靠性更高
什么是Flink
Flink诞生背景
- Flink起源于Stratosphere(斯cua投斯费尔)项目,Stratosphere是在2010~2014年由地处柏林的大学和欧洲的一些其他的大学共同进行的研究项目
- 2014年4月捐赠给了Apache软件基金会
- 2014年12月成为Apache软件基金会的顶级项目。(DS调度花费2年,可见Flink很快了)
LOGO介绍
- 在德语中,Flink一词表示快速和灵巧,项目采用松鼠的彩色图案作为logo,Flink的松鼠logo尾巴的颜色与Apache软件基金会的logo颜色相呼应,也就是说,这是一只Apache风格的松鼠。
Flink概述
Flink主页在其顶部展示了该项目的理念:“Apache Flink是为分布式、高性能、随时可用以及准确的流处理应用程序打造的开源流处理框架”。
Flink是一款分布式的计算引擎,它可以用来做批处理;也可以用来做流处理
哪些公司在使用Flink
Flink中的批和流
批处理的特点是有界、持久、大量,非常适合需要访问全部记录才能完成的计算工作,一般用于离线统计。
流处理的特点是无界、实时, 无需针对整个数据集执行操作,而是对通过系统 传输的每个数据项执行操作,一般用于实时统计。
而在Flink中,一切都是由流组成的,Flink认为有界数据集是无界数据流的一种特例,离线数据是有界限的流,实时数据是一个没有界限的流,这就是所谓的有界流和无界流。
无界流:意思很明显,只有开始没有结束。必须连续的处理无界流数据,也即是在事件注入之后立即要对其进行处理。不能等待数据到达了再去全部处理,因为数据是无界的并且永远不会结束数据注入。处理无界流数据往往要求事件注入的时候有一定的顺序性,例如可以以事件产生的顺序注入,这样会使得处理结果完整。
有界流:也即是有明确的开始和结束的定义。有界流可以等待数据全部注入完成了再开始处理。注入的顺序不是必须的了,因为对于一个静态的数据集,我们是可以对其进行排序的。有界流的处理也可以称为批处理。
性能比较
首先,我们可以通过下面的性能测试初步了解两个框架的性能区别,它们都可以基于内存计算框架进行实时计算,所以都拥有非常好的计算性能。经过测试,Flink计算性能上略好。
测试环境:
- CPU:7000个;
- 内存:单机128GB;
- 版本:Hadoop 2.3.0,Spark 1.4,Flink 0.9
- 数据:800MB,8GB,8TB;
- 算法:K-means:以空间中K个点为中心进行聚类,对最靠近它们的对象归类。通过迭代的方法,逐次更新各聚类中心的值,直至得到最好的聚类结果。
- 迭代:K=10,3组数据
测试结果:
纵坐标是秒,横坐标是次数
Spark和Flink全部都运行在Hadoop YARN上,性能为Flink > Spark > Hadoop(MR),迭代次数越多越明显,性能上,Flink优于Spark和Hadoop
Flink流处理特性
- 支持高吞吐、低延迟、高性能的流处理
- 支持带有事件时间的窗口(Window)操作
- 支持有状态计算的Exactly-once语义
- 支持高度灵活的窗口(Window)操作,支持基于time、count、session,以及data-driven的窗口操作
- 支持具有Backpressure功能的持续流模型(自动降速Source)
- 支持基于轻量级分布式快照(Snapshot)实现的容错
- 一个运行时同时支持Batch on Streaming处理和Streaming处理
- Flink在JVM内部实现了自己的内存管理
- 支持迭代计算
- 支持程序自动优化:避免特定情况下Shuffle、排序等昂贵操作,中间结果有必要进行缓存
发展历史
- 2008年,Flink 的前身已经是柏林理工大学一个研究性项目,原名 StratoSphere
- 2014-04-16,Flink成为 ASF(Apache Software Foundation)的顶级项目之一,从Stratosphere 0.6开始,正式更名为Flink。由Java语言编写
- 2014-11-04,Flink 0.7.0发布,介绍了最重要的特性:Streaming API
- 2016-03-08,Flink 1.0.0,支持Scala
- 2019-01-08,阿里巴巴以9000万欧元的价格收购了总部位于柏林的初创公司Data Artisans,也就是Flink的母公司
- 最新版本已经到了1.16
我目前的开发是基于flink-1.10.0这个版本来进行的
Flink在阿里的现状
- 基于Apache Flink在阿里巴巴搭建的平台于2016年正式上线,并从阿里巴巴的搜索和推荐这两大场景开始实现。
- 目前阿里巴巴所有的业务,包括阿里巴巴所有子公司都采用了基于Flink搭建的实时计算平台。
- 同时Flink计算平台运行在开源的Hadoop集群之上。
- 采用Hadoop的YARN做为资源管理调度,以 HDFS作为数据存储。
- 因此,Flink可以和开源大数据软件Hadoop无缝对接。
目前,这套基于Flink搭建的实时计算平台不仅服务于阿里巴巴集团内部,而且通过阿里云的云产品API向整个开发者生态提供基于Flink的云产品支持。
Flink的优势
Flink 通过实现了 Google Dataflow 流式计算模型实现了高吞吐、低延迟、高性能兼具实时流式计算框架。
同时 Flink 支持高度容错的状态管理,防止状态在计算过程中因为系统异常而丢失,Flink 周期性地通过分布式快照技术 Checkpoints 实现状态的持久化维护,使得即使在系统停机或者异常情况下都能计算出正确的结果。
具体的优势有以下几点
- 同时支持高吞吐、低延迟、高性能
- 支持事件时间(Event Time)概念
- 支持有状态计算
- 支持高度灵活的窗口(Window)操作
- 基于轻量级分布式快照(Snapshot)实现的容错
- 基于 JVM 实现的独立的内存管理
- Save Points 保存点
Flink的应用场景
阿里在Flink的应用主要包含四个模块:实时监控、实时报表、流数据分析和实时仓库。
实时监控
- 用户行为预警、app crash 预警、服务器攻击预警
- 对用户行为或者相关事件进行实时监测和分析,基于风控规则进行预警
实时报表
- 双11、双12等活动直播大屏
- 对外数据产品:生意参谋等
- 数据化运营
流数据分析
- 实时计算相关指标反馈及时调整决策
- 内容投放、无线智能推送、实时个性化推荐等
实时仓库
- 数据实时清洗、归并、结构化
- 数仓的补充和优化
国内使用情况
- Alibaba 使用 Flink 的分支版本 Blink 来优化实时搜索排名。当商家录入一个商品之后,实时计算引擎(Flink)在秒级别 build 商品索引,优化商品搜索。
- 腾讯利用 Apache Flink 构建了一个内部平台(Oceanus),以提高开发和操作实时应用程序的效率。
- 快手使用了 Apache Flink 搭建了一个实时监控平台,监控短视频和直播的质量。
- 利用 Apache Flink 构建了实时数据仓库,用于即时分析运营活动效果及用户短期兴趣。
- 华为云提供基于 Flink 的云服务。
- 滴滴使用 Apache Flink支持了实时监控、实时特征抽取、实时ETL等业务。
- Ebay 的监控平台由 Flink 提供支持,可在指标和日志流上计算上千条自定义报警规则。
- 爱立信使用 Flink 构建了一个实时异常检测器,通过大型基础设施进行机器学习。
- Uber 在 Apache Flink 上构建了基于 SQL 的开源流媒体分析平台 AthenaX。
- Yelp 利用 Flink 为其数据连接器生态系统和流处理基础架构提供支持。
- 财富 500 强金融服务公司 Capital One 使用 Flink 进行实时活动监控和报警。