Flink VS Spark

目录

对于流的处理

数据模型

架构模型:

任务调度:

时间机制:

容错机制:

其他

总结

角色类比

图表

Flink的优势


  1. 对于流的处理

Flink和Spark的最大区别依然是对于流的处理上, Spark使用小批量来处理流, 而Flink使用流来处理批

Spark Streaming 是微批处理,运行的时候需要指定批处理的时间,每次运行 job 时处理一个批次的数据;

Flink 是基于事件驱动的,事件可以理解为消息。事件驱动的应用程序是一种状态应用程序,它会从一个或者多个流中注入事件,通过触发计算更新状态,或外部动作对注入的事件作出反应。

  1. 数据模型:

Spark的数据模型是弹性分布式数据集RDD

RDD, SQL, DataSet, DataFrame, DStream

Flink的基本数据模型是数据流, 以及事件的序列

SQL, Table, DataStream, DataSet, Stateful Stream Processing

  1. 架构模型:

Spark Streaming的task运行依赖driver和executor和worker,当然driver和excutor还依赖于集群管理器Standalone或者yarn等。

而Flink运行时主要是JobManager、TaskManage和TaskSlot。

  1. 任务调度:

Spark Streaming的调度分为构建 DGA 图,划分 stage,生成 taskset,调度 task等步骤

而Flink首先会生成 StreamGraph/Sream DataFlow,接着生成 JobGraph,然后将 jobGraph 提交给 Jobmanager 由它完成 jobGraph 到 ExecutionGraph 的转变,最后由 jobManager 调度执行。

  1. 时间机制:

flink 支持三种时间机制事件时间,注入时间,处理时间,同时支持 watermark 机制处理滞后数据。

Spark Streaming 只支持处理时间,Structured streaming则支持了事件时间和watermark机制。

  1. 容错机制:

二者保证exactly-once的方式不同。

spark streaming 通过保存offset和事务的方式;

Flink 则使用两阶段提交协议来解决这个问题。

  1. 其他

Flink在计算引擎中引入了托管状态的概念, 对于事件可以进行有状态的处理

Flink 可以支持本地的快速迭代,以及一些环形的迭代任务。

Flink 可以定制化内存管理。

Flink 并没有将内存完全交给应用层。这也是为什么 Spark 相对于 Flink,更容易出现 OOM 的原因(out of memory)。

性能测试

我们可以通过下面的性能测试初步了解两个框架的性能区别,它们都可以基于内存计算框架进行实时计算,所以都拥有非常好的计算性能。

经过测试,Flink计算性能上略好。 

测试环境: 

1.CPU:7000个; 

2.内存:单机128GB; 

3.版本:Hadoop 2.3.0,Spark 1.4,Flink 0.9 

4.数据:800MB,8GB,8TB; 

5.算法:K-means:以空间中K个点为中心进行聚类,对最靠近它们的对象归类。通过迭代的方法,逐次更新各聚类中心的值,直至得到最好的聚类结果。 

6.迭代:K=10,3组数据 

Storm 单线程吞吐约为 8.7 万条/秒,Flink 单线程吞吐可达 35 万条/秒。Flink 吞吐约为 Storm 的 3-5 倍。

阿里Flink集群双十一峰值每秒能处理17亿数据量,一天可处理上万亿条数据(某广告平台一天8亿条数据--->400-500G左右数据)

在单机上, Flink消息处理的延迟大概在200毫秒左右, Flink 在满吞吐时的延迟约为 Storm 的一半,且随着 QPS 逐渐增大,Flink 在延迟上的优势开始体现出来。

综上可得,Flink 框架很多地方优于其他相关技术

Spark和Flink全部都运行在Hadoop YARN上,

性能为Flink > Spark > Hadoop(MR),迭代次数越多越明显,

性能上,Flink优于Spark和Hadoop最主要的原因是Flink支持增量迭代,具有对迭代自动优化的功能

​​​​​​​总结

  1. 角色类比

SparkStreaming

Flink

DStream

DataStream

Trasnformation

Trasnformation

Action

Sink

Task

subTask

TaskSet

Task

Stage/Pipeline

Oprator chains 

DAG

Streaming DataFlow Graph

Master + Driver

JobManager

Worker + Executor

TaskManager

 

 

  1. 图表

Spark

Flink

定义

弹性的分布式数据集,并非真正的实时计算

真正的流计算,就像storm一样;

但flink同时支持有限的数据流计算(批处理)

高容错

沉重

非常轻量级

内存管理

使用的JVM的内存管理

Flink在JVM中实现的是自己的内存管理

程序调优

SQL有自动优化机制

自动地优化一些场景,比如避免一些昂贵的操作

(如shuffle和sorts),还有一些中间缓存

 

  1. Flink的优势

和Hadoop相比, Flink使用内存进行计算, 速度明显更优

和同样使用内存的Spark相比, Flink对于流的计算是实时的, 延迟更低

和同样使用实时流的Storm相比, Flink明显具有更优秀的API, 以及更多的支持, 并且支持批量计算

支持高吞吐、低延迟、高性能的流处理

支持带有事件时间的窗口(Window)操作

支持有状态计算的Exactly-once语义

支持高度灵活的窗口(Window)操作,支持基于time、count、session,以及data-driven的窗口操作

支持具有Backpressure功能的持续流模型

支持基于轻量级分布式快照(Snapshot)实现的容错

一个运行时同时支持Batch on Streaming处理和Streaming处理

Flink在JVM内部实现了自己的内存管理

支持迭代计算

支持程序自动优化:避免特定情况下Shuffle、排序等昂贵操作,中间结果有必要进行缓存

 

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大数据架构师Pony

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值