spark 和 flink 的对比

5 篇文章 1 订阅

一、设计理念

        Spark 的数据模型是 弹性分布式数据集 RDD(Resilient Distributed Dattsets),这个内存数据结构使得spark可以通过固定内存做大批量计算。初期的 Spark Streaming 是通过将数据流转成批 (micro-batches),即收集一段时间(time-window)内到达的所有数据,并在其上进行常规批处理,所以严格意义上,还不能算作流式处理。但是 Spark 从 2.x 版本开始推出基于 Continuous Processing Mode 的 Structured Streaming,支持按事件时间处理和端到端的一致性,但是在功能上还有一些缺陷,比如对端到端的 exactly-once 语义的支持。

spark DAG示意图:

        Flink 是统一的流和批处理框架,基本数据模型是数据流,以及事件 (Event) 的序列,Flink 从设计之初秉持了一个观点:批是流的特例。每一条数据都可以出发计算逻辑,那么 Flink 的流特性已经在延迟方面占得天然优势。

一个典型的 Flink workflow 示意图:

 

        Flink 还提供了一个独特的概念叫做 有状态的计算,它被用来处理一种情况:数据的处理和之前处理过的数据或者事件有关联。比如,在做聚合操作的时候,一个批次的数据聚合的结果依赖于之前处理过的批次。早期的Spark用户会经常受此类问题所困扰,直到Structured Streaming的出现才得已解决。

总结:

1、Spark的技术理念是使用微批来模拟流的计算,基于Micro-batch,数据流以时间为单位被切分为一个个批次,通过分布式数据集RDD进行批量处理,是一种伪实时。

2、Flink是基于事件驱动的,是面向流的处理框架, Flink基于每个事件一行一行地流式处理,是真正的流式计算. 另外他也可以基于流来模拟批进行计算实现批处理。

二、架构方面

1、Spark在运行时的主要角色包括:Master、Worker、Driver、Executor。

在这里插入图片描述 

2、Flink 在运行时主要包含:Jobmanager、Taskmanager和Slot。

三、任务调度

1、Spark Streaming 连续不断的生成微小的数据批次,构建有向无环图DAG,根据DAG中的action 操作形成 job ,每个job有根据窄宽依赖生成多个 stage 。

2、Flink 根据用户提交的代码生成 StreamGraph,经过优化生成 JobGraph,然后提交给 JobManager 进行处理,JobManager 会根据 JobGraph 生成 ExecutionGraph,ExecutionGraph 是 Flink 调度最核心的数据结构,JobManager 根据 ExecutionGraph 对 Job 进行调度。

四、时间机制

1、Spark Streaming 支持的时间机制有限,只支持处理时间。使用processing time模拟event time必然会有误差, 如果产生数据堆积的话,误差则更明显。

2、flink支持三种时间机制:事件时间,注入时间,处理时间,同时支持 watermark 机制处理迟到的数据,说明Flink在处理乱序大实时数据的时候,更有优势。

五、容错机制

1、SparkStreaming 的容错机制是基于RDD的容错机制,会将经常用的RDD或者对宽依赖加Checkpoint。利用 SparkStreaming 的 direct 方式与 Kafka 可以保证数据输入源的,处理过程,输出过程符合 exactly once 。

2、Flink 则使用两阶段提交协议来保证 exactly once 。

六、吞吐量和延迟

1、spark是基于微批的,而且流水线优化做的很好,所以说他的吞入量是最大的,但是付出了延迟的代价,它的延迟是秒级;

2、而Flink是基于事件的,消息逐条处理,而且他的容错机制很轻量级,所以他能在兼顾高吞吐量的同时又有很低的延迟,它的延迟能够达到毫秒级;

 

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值