系列文章目录
【跟小嘉学 Apache Flink】一、Apache Flink 介绍
文章目录
文章目录
一、Apache Flink
1.1、Apache Flink是什么
Apache Flink 是一个框架和分布式处理引擎,用于对无界(Unbounded streams)和有界数据流(bounded streams)进行状态计算。Flink 被设计在所有的常见的集群环境,以内存中的速度和任意规模执行计算。
无界数据流(Unbounded streams): 可以定义数据的开始,无法定义数据的结尾,会无休止的产生数据,因此无界数据流必须会被持续处理,即数据背接受后需要立刻被处理,我们无法等待所有数据都到达后再进行处理,在处理无界时候一般会以特定的顺序及逆行处理,比如数据的产生顺序而不是数据进入处理程序的顺序,以此来推断处理结果的完整性。
有界数据流(bounded streams): 可以定义数据的开始,也可以定义数据的结尾,其非常适合需要访问全部数据才能完成计算工作的数据,同事处理有界数据流不需要有序获取数据,所以有界数据流的所有数据可以被排序,相对于无界数据流,有界数据流处理数据的有序性十分简单。
官网地址:https://flink.apache.org/
flink 发展时间线:
- 2014年8月,Flink 第一个版本 0.6 正式发布,与此同时Flink的几位核心开发者创办了 Data Artisans 公司;
- 2014年12月,Flink 项目完成孵化;
- 2015年4月,Flink 发布了里程碑的重要版本0.9.0;
- 2019年1月,长期对Flink投入研发的阿里巴巴,以9000万欧元的价格收购了 Data Artisans 公司;
- 2019年8月,阿里巴巴将内部版本 Blink 开源,合并入 Flink 1.9.0 版本;
1.2、Apache Flink 框架处理流程
1.3、Flink 的应用场景
批处理:数据攒够了一批处理一批,比如Hive、数据库、Spark等传统数据处理方式,批处理的场景就像发邮件,一次可以说好多话,可以了解美女某段时间的心理状态。
流处理:数据来一条就实时处理一条,流处理场景就像聊天,你一句我一句,可以实时了解对方当前的心理需求。
1.4、为什么要用Flink
- 批处理和流处理;
- 流数据更真实的反映了我们的生活方式;
- 我们的目标:
- 低延迟;
- 高吞吐;
- 结果的准确性和良好的容错性;
1.5、数据处理框架演变
1.5.1、传统数据处理框架:事务处理(OLTP)
1.5.2、传统数据处理框架:分析处理(OLAP)
数据量可以很大,但是不够实时;HIVE
1.5.3、有状态的流式处理
apache storm:
1.5.4、lambda 架构
用两套系统,同时保证低延迟和结果准确;
1.5.5、Kappa架构
核心特点:
- 高吞吐,低延迟;
- 结果的准确性;
- 精确一次(exactly-once)的状态一致性保证;
- 可以与众多存储系统连接;
- 高可用,支持动态扩展;
1.6、流处理的应用
1.6.1、事件驱动型应用
无须查询远程的事务性数据库,本地访问使它具有更高的时吞吐量和更低的延迟,由于定期向远处持久化存储系统写入检查点的工作可以异步,增量式完成,因此对于正常的事件处理的影响甚微。并且它的优势不仅于此,传统分层架构下,通常多个应用会共享一个数据库,因此对任何数据对修改都需要谨慎协调;反而它由于只要考虑自身数据,因此在应用更新或服务扩容对协调工作将大大减少。
1.6.2、数据分析型应用
1.6.3、数据管道型应用
提取——转换——加载(ETL)是一种在存储系统之间进行数据转换和迁移的常用方法。ETL作业通常会周期性触发,将数据从事务性数据库复制到分析型数据库或数据仓库中。
数据管道和ETL作业的用途相似,都可以转换和加载数据,并将其从某个存储系统移动到另一个。但数据管道是以持续流处理模式运行的,而非周期性触发。因此它支持一个不断生成数据的源头读取记录,并将它们以极低的延迟发送到终点。
- 电子商务中的实时搜索索引构建
- 电子商务中持续的ETL
1.7、分层API
越顶层越抽象,表达含义越简明,使用越方便;
越底层越具体,表达能力越丰富,使用越灵活;
1.8、Flink Vs Spark
1.8.1、数据处理架构
1.8.2、数据模型
- spark 采用 RDD 模型, Spark streaming 的 DStream 实际上也就是一组小批数据 RDD的集合;
- flink 基本数据抹稀泥个就是数据流以及事件(Event)序列;
1.8.3、运行时架构
- spark 是批计算,将DAG划分为不同的 stage,一个完成后才可以计算下一个;
- flink 是标准的流执行模式。一个事件在一个节点处理完成后可以直接发往下一个节点进行处理;