【架构-37】Spark和Flink

架构和运行时模型

  1. Spark
    批处理为核心的架构扩展:Spark 最初是为批处理设计的,其架构以弹性分布式数据集(RDD)为核心。RDD 是一种分布式的内存抽象,可以让用户在集群上进行高效的并行计算。在 Spark 中,计算被划分为一系列的阶段(Stage),通过转换(Transformation)和行动(Action)操作来构建计算逻辑。例如,用户可以通过对 RDD 进行 map(映射)、reduce(归约)等转换操作来处理数据,当执行行动操作(如 collect、count)时,才会触发真正的计算过程。这种批处理架构使得 Spark 在处理大规模数据集的批量任务时表现出色,如大数据集的排序、过滤、聚合等操作。
    批处理和流处理的融合(Structured Streaming):随着发展,Spark 引入了 Structured Streaming 来支持流处理。它将流数据看作是一个不断追加的表,通过在流数据上定义类似于批处理的查询操作,实现流处理。这种方式在一定程度上实现了批处理和流处理的统一,但在底层实现上,仍然是基于微批处理(Micro - batch)的模式。即把流数据按照一定的时间间隔(如几百毫秒)划分成小的批次,然后像批处理一样进行处理。
  2. Flink
    原生的流处理架构:Flink 是一个原生的流处理系统,它的架构围绕着流(Stream)构建。在 Flink 的世界观里,一切都是流,包括批处理也被看作是一种特殊的流(有限流)。它采用事件驱动(Event - driven)的方式,能够以很低的延迟处理每个事件。例如,对于实时的传感器数据,Flink 可以逐个事件地进行处理,如实时计算传感器数据的平均值、检测异常事件等,而不需要等待数据积累成批次。
    分层架构支持多种计算模式:Flink 具有分层的架构,包括最底层的流计算引擎,中间层的 Table API 和 SQL,以及上层的各种库(如用于机器学习的 Flink ML、用于图计算的 Gelly 等)。这种架构使得 Flink 既可以进行高效的流处理,也可以通过将流转换为表(Table)来进行关系型查询和处理,还能方便地集成其他高级计算模式。例如,用户可以使用 Flink 的 Table API 像操作数据库表一样操作流数据,进行连接(Join)、分组(Group By)等操作。

数据处理模型

  1. Spark:主要是批处理框架,但也支持流处理(通过 Spark Streaming)。Spark Streaming 通过微批处理的方式处理流数据,即将流数据分成小批次进行处理。
  2. Flink:专注于流处理,提供真正的流式处理能力。Flink 的流处理是事件驱动的,可以处理无界流数据,且支持低延迟。

延迟

  1. Spark:由于微批处理的特性,Spark Streaming 的延迟相对较高,通常在几秒到几分钟之间。
  2. Flink:提供更低的延迟,通常在毫秒级别,适合实时数据处理。

编程模型和 API 易用性

  1. Spark:提供了丰富的 API,包括 DataFrame 和 Dataset API,适合批处理和流处理的场景。
  2. Flink:提供了更为灵活的流处理 API,支持事件时间处理、窗口等高级特性,适合复杂的流处理应用。

使用场景:

  1. Spark:适合批处理和需要较高容错性的场景,如大规模数据分析和机器学习。
  2. Flink:适合实时流处理和低延迟需求的场景,如实时监控、事件驱动应用等。
相关推荐
ycsdn103 小时前
Caused by: org.apache.flink.api.common.io.ParseException: Row too short:
大数据·flink
Gemini19953 小时前
分布式和微服务的区别
分布式·微服务·架构
数新网络6 小时前
《深入浅出Apache Spark》系列②:Spark SQL原理精髓全解析
大数据·sql·spark
Dann Hiroaki11 小时前
GPU架构概述
架构
茶馆大橘12 小时前
微服务系列五:避免雪崩问题的限流、隔离、熔断措施
java·jmeter·spring cloud·微服务·云原生·架构·sentinel
coding侠客12 小时前
揭秘!微服务架构下,Apollo 配置中心凭啥扮演关键角色?
微服务·云原生·架构
lipviolet13 小时前
架构系列---高并发
架构
Phodal13 小时前
架构赋能 AI:知识工程推动下的软件架构数字化
人工智能·架构
天冬忘忧15 小时前
Spark 程序开发与提交:本地与集群模式全解析
大数据·分布式·spark