首页 > 其他分享 >flink教程:Flink 和 Spark Streaming的区别?

flink教程:Flink 和 Spark Streaming的区别?

时间:2023-09-03 13:04:45浏览次数:42  
标签:flink 处理 Flink Streaming 时间 Spark 延迟


Flink 和 Spark Streaming的区别?

flink教程:Flink 和 Spark Streaming的区别?_Streaming

FlinkSpark Sreaming 最大的区别在于:Flink 是标准的实时处理引擎,基于事件驱动,以流为核心,而 Spark Streaming 的RDD 实际是一组小批次的RDD集合,是微批(Micro-Batch)的模型,以批为核心

概述

下面我们介绍两个框架的主要区别:

1. 架构模型

Spark Streaming 在运行时的主要角色包括:

服务架构集群和资源管理 Master Yarn Application Master;

工作节点 Work Node Manager;

任务调度器 Driver;任务执行器 Executor

flink教程:Flink 和 Spark Streaming的区别?_数据处理_02

Flink 在运行时主要包含:客户端 Client、作业管理 Jobmanager、任务管理Taskmanager。

flink教程:Flink 和 Spark Streaming的区别?_Streaming_03

2. 任务调度

Spark Streaming 连续不断的生成微小的数据批次,构建有向无环图DAG,Spark Streaming 会依次创建 DStreamGraph、JobScheduler。

flink教程:Flink 和 Spark Streaming的区别?_Streaming_04

Flink 根据用户提交的代码生成 StreamGraph,经过优化生成 JobGraph,然后提交给 JobManager进行处理,JobManager 会根据 JobGraph 生成 ExecutionGraph,ExecutionGraph 是 Flink 调度最核心的数据结构,JobManager 根据 ExecutionGraph 对 Job 进行调度,根据物理执行图部署到Taskmanager上形成具体的Task执行。

flink教程:Flink 和 Spark Streaming的区别?_flink_05

3. 时间机制

Spark Streaming 支持的时间机制有限,只支持处理时间。

Flink 支持了流处理程序在时间上的三个定义:事件时间 EventTime摄入时间 IngestionTime处理时间 ProcessingTime。同时也支持 watermark 机制来处理滞后数据。

flink教程:Flink 和 Spark Streaming的区别?_数据_06

4. 容错机制

对于 Spark Streaming 任务,我们可以设置 checkpoint,然后假如发生故障并重启,我们可以从上次 checkpoint 之处恢复,但是这个行为只能使得数据不丢失,可能会重复处理,不能做到恰好一次处理语义。

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

补充

Flink和Spark Streaming是两个流处理框架,它们在处理实时数据流的方式和特性上存在一些区别。以下是Flink和Spark Streaming之间的一些主要区别:

  1. 数据处理模型:
  • Flink:Flink采用基于事件时间(Event Time)的数据处理模型,该模型以事件产生的时间为基准进行处理和窗口操作。Flink支持事件时间和处理时间两种时间语义,并提供了强大的事件时间处理功能,例如水位线(Watermark)机制和窗口操作。
  • Spark Streaming:Spark Streaming采用基于批处理的离散化流处理(Discretized Stream Processing)模型,将连续的数据流划分为小的批次,并按批次进行处理。它以微批处理的形式进行数据处理,每个批次的数据都是独立的。
  1. 容错性和一致性:
  • Flink:Flink具有强大的容错能力,能够提供Exactly-Once语义的处理保证。它通过检查点(Checkpoints)机制记录应用程序的状态,并在故障恢复时保持一致性。Flink的容错性是基于状态的,可以容忍任务和作业管理器的故障。
  • Spark Streaming:Spark Streaming通过将数据转换为RDD(Resilient Distributed Datasets)来实现容错性。它使用RDD的弹性特性来处理故障,但在面对故障时,可能会出现数据重复或丢失的情况。Spark Streaming通常提供至少一次语义的处理保证。
  1. 处理延迟:
  • Flink:Flink具有低延迟处理的能力,并且可以实现毫秒级的延迟。它通过灵活的事件时间处理和流水线执行模型来实现高效的数据处理。
  • Spark Streaming:由于Spark Streaming是基于微批处理的,因此具有一定的处理延迟。每个批次的处理时间通常在几秒到几十秒之间,因此相对于Flink,它的延迟更高。
  1. 扩展性:
  • Flink:Flink具有良好的扩展性,可以处理大规模的数据流和并行计算。它支持作业和任务级别的并行度设置,并能够动态调整资源分配和任务调度,以适应不同的工作负载。
  • Spark Streaming:Spark Streaming的扩展性较弱,主要依赖于Spark的批处理引擎。它通常通过增加计算资源来提高处理能力,但在面对高吞吐量和低延迟的大规模数据流时可能存在限制。

需要注意的是,除了Spark Streaming,Apache Spark还提供了Structured Streaming模块,它在处理实时数据流方面与Flink类似,并提供了更接近事件时间语义和更低的延迟。

总的来说,Flink和Spark Streaming在数据处理模型、容错性、延迟和扩展性等方面存在一些区别。选择合适的流处理框架应该根据具体的需求和应用场景来评估其特点和适用性。


标签:flink,处理,Flink,Streaming,时间,Spark,延迟
From: https://blog.51cto.com/zhangxueliang/7339498

相关文章

  • flink基础:什么是Flink?
    什么是Flink?描述一下Flink是一个以流为核心的高可用、高性能的分布式计算引擎。具备流批一体,高吞吐、低延迟,容错能力,大规模复杂计算等特点,在数据流上提供数据分发、通信等功能。ApacheFlink是一个开源的流式处理和批处理框架,旨在处理高吞吐量和低延迟的大规模数据流。它提供了......
  • Flink 1.17教程:任务槽Task Slots和并行度的关系
    任务槽TaskSlots在ApacheFlink中,任务槽(TaskSlots)是指可用于执行并行任务的资源单元。每个任务槽可以看作是一个可用的执行线程或处理单元,用于并行执行作业的不同部分。通俗来说,可以将任务槽想象成一个工作台,而每个工作台上都可以同时进行一项任务。任务槽的数量决定了同时可以......
  • Flink 1.17教程:Standalone会话模式运行时架构及并行度
    运行时架构——Standalone会话模式为例并行度并行度是指在计算过程中同时执行多个任务或操作的能力。在ApacheFlink中,并行度是指同时执行作业中的多个任务或算子的能力。并行度的引入是为了解决以下问题:提高计算速度:通过将任务拆分成多个子任务,并行执行它们,可以大大提高计算速度......
  • Flink 1.17教程:历史服务器History Server
    K8S运行模式容器化部署是如今业界流行的一项技术,基于Docker镜像运行能够让用户更加方便地对应用进行管理和运维。容器管理工具中最为流行的就是Kubernetes(k8s),而Flink也在最近的版本中支持了k8s部署模式。基本原理与YARN是类似的,具体配置可以参见官网说明,这里我们就不做过多讲解了......
  • Flink 1.17教程:并行度设置&优先级
    并行度设置&优先级并行度(Parallelism)并行度的设置在Flink中,可以用不同的方法来设置并行度,它们的有效范围和优先级别也是不同的。代码中设置我们在代码中,可以很简单地在算子后跟着调用setParallelism()方法,来设置当前算子的并行度:stream.map(word->Tuple2.of(word,1L)).setParall......
  • Flink 1.17教程:算子链Operator Chain
    算子链OperatorChain在ApacheFlink中,算子链(OperatorChaining)是将多个操作符(算子)连接在一起形成一个链式结构的优化技术。算子链的作用是将多个操作符合并为一个单一的任务单元,以减少通信开销、提高执行效率和减少资源占用。通俗来说,算子链的作用可以比喻为将多个操作合并成一......
  • Flink 1.17教程:Hadoop yarn会话运行模式
    YARN运行模式_环境准备YARN上部署的过程是:客户端把Flink应用提交给Yarn的ResourceManager,Yarn的ResourceManager会向Yarn的NodeManager申请容器。在这些容器上,Flink会部署JobManager和TaskManager的实例,从而启动集群。Flink会根据运行在JobManger上的作业所需要的Slot数量动态分配T......
  • Flink 1.17教程:部署模式介绍及Standalone运行模式
    部署模式介绍在一些应用场景中,对于集群资源分配和占用的方式,可能会有特定的需求。Flink为各种场景提供了不同的部署模式,主要有以下三种:会话模式(SessionMode)、单作业模式(Per-JobMode)、应用模式(ApplicationMode)。它们的区别主要在于:集群的生命周期以及资源的分配方式;以及应用的mai......
  • Flink 1.17教程:Hadoop yarn运行模式——单作业模式和应用模式
    YARN运行模式_单作业模式单作业模式部署(1)执行命令提交作业YARN运行模式_应用模式应用模式同样非常简单,与单作业模式类似,直接执行flinkrun-application命令即可。如:bin/flinkrun-application-tyarn-application-ccom.atguigu.wc.WordCountStreamUnboundedDemo./FlinkTutorial......
  • Flink 1.17教程:命令行提交作业jar
    命令行提交作业bin/flinkrun-mnode001:8081-ccom.atguigu.wc.WordCountStreamUnboundedDemo../jar/FlinkTutorial-1.17-1.0-SNAPSHOT.jar连接成功Lastlogin:FriJun1614:44:012023from192.168.10.1[atguigu@node001~]$cd/opt/module/flink/flink-1.17.0/[atgu......