这几年,在整个大数据领域,Flink可算是火得一塌糊,不但将阿里Blink中的大部分特性merge到社区的Flink中,使得Flink在流式实时计算领域更是一骑绝尘,让其他实时计算框架只能望其项背,目前Flink根本经看不到其他的对手!同时Flink新版本又完美的兼容Hive,使得Flink在离线计算也快马加鞭,飞速赶超,完美实现批流统一,甚至很多有人称2020年为批流统一元年!
一、什么是Flink
-
Flink简介
Apache Flink 是一个分布式大数据处理引擎,可对有限数据流和无限数据流进行有状态计算。可部署在各种集群环境,对各种大小的数据规模进行快速计算。
-
Flink的历史
早在 2008 年,Flink 的前身已经是柏林理工大学一个研究性项目, 在 2014 被 Apache 孵化器所接受,然后迅速地成为了 ASF(Apache Software Foundation)的顶级项目之一。
Flink的商业公司 Data Artisans,位于柏林的,公司成立于2014年,共获得两轮融资共计650万欧。该公司旨在为企业提供大规模数据处理解决方案,使企业可以管理和部署实时数据,实时反馈数据,做更快、更精准的商业决策。目前,ING, Netflix 和 Uber 等企业都通过 Data Artisans 的 Apache Flink 平台部署大规模分布式应用,如实时数据分析、机器学习、搜索、排序推荐和欺诈风险等。
2019年1月8日,阿里巴巴以 9000 万欧元收购该公司!
二、Flink的特点
-
批流统一
-
支持高吞吐、低延迟、高性能的流处
-
支持带有事件时间的窗口(Window)操作
-
支持有状态计算的Exactly-once语义
-
支持高度灵活的窗口(Window)操作,支持基于time、count、session窗口操作
-
支持具有Backpressure功能的持续流模型
-
支持基于轻量级分布式快照(Snapshot)实现的容错
-
支持迭代计算
-
Flink在JVM内部实现了自己的内存管理
-
支持程序自动优化:避免特定情况下Shuffle、排序等昂贵操作,中间结果有必要进行缓存
三、传统Lambda架构的存在的问题
-
冗余存储
数据将会存储在多个系统中,增加冗余存粗。 -
维护成本高
每个系统的数据格式不一致,数据需要做转换,增加维护成本,尤其是当业务到达一定量级时,维护成本剧增。 -
学习成本高
多个系统之前需要完全打通,不同的产品有不同的开发方式,尤其是针对新人来说,需要投入更多的精力去学习多种系统,增加学习成本。
四、Flink与其他框架的对比
框架 | 优点 | 缺点 |
storm | 低延迟 | 吞吐量低、不能保证exactly-once、编程API不丰富 |
Spark Streaming | 吞吐量高、可以保证exactly-once、编程API丰富 | 延迟较高 |
Flink | 低延迟、吞吐量高、可以保证exactly-once、编程API丰富 | 快速迭代中,API变化比较快 |
-
spark streaming
Spark就是为离线计算而设计的,在Spark生态体系中,不论是流处理和批处理都是底层引擎都是Spark Core,Spark Streaming将微批次小任务不停的提交到Spark引擎,从而实现准实时计算,SparkStreaming只不过是一种特殊的批处理而已。
Spark Streaming存在的问题
-
处理延迟较高
-
对状态的支持不完美
-
对窗口的支持不灵活
-
不支持EventTime
-
Flink
Flink就是为实时计算而设计的,Flink可以同时实现批处理和流处理,Flink将批处理(即有有界数据)视作一种特殊的流处理。
五、Flink架构简介
-
JobManager:
也称之为Master,用于协调分布式执行,它用来调度task,协调检查点,协调失败时恢复等。Flink运行时至少存在一个master,如果配置高可用模式则会存在多个master,它们其中有一个是leader,而其他的都是standby。
-
TaskManager:
也称之为Worker,用于执行一个dataflow的task、数据缓冲和Data Streams的数据交换,Flink运行时至少会存在一个TaskManager。JobManager和TaskManager可以直接运行在物理机上,或者运行YARN这样的资源调度框架,TaskManager通过网络连接到JobManager,通过RPC通信告知自身的可用性进而获得任务分配。
SparkStreaming和Flink的角色对比
Spark Streaming | Flink |
DStream |
DataStream |
Trasnformation |
Trasnformation |
Action | Sink |
Task | SubTask |
Pipeline |
Oprator chains |
DAG |
DataFlow Graph |
Master + Driver |
JobManager |
Worker + Executor |
TaskManager |
转自:https://www.cnblogs.com/weiyiming007/p/15830590.html