【架构-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:适合实时流处理和低延迟需求的场景,如实时监控、事件驱动应用等。
相关推荐
森焱森1 小时前
水下航行器外形分类详解
c语言·单片机·算法·架构·无人机
诗旸的技术记录与分享6 小时前
Flink-1.19.0源码详解-番外补充3-StreamGraph图
大数据·flink
强哥之神7 小时前
英伟达发布 Llama Nemotron Nano 4B:专为边缘 AI 和科研任务优化的高效开源推理模型
人工智能·深度学习·语言模型·架构·llm·transformer·边缘计算
DemonAvenger8 小时前
高性能 TCP 服务器的 Go 语言实现技巧:从原理到实践
网络协议·架构·go
Code季风8 小时前
深入理解微服务中的服务注册与发现(Consul)
java·运维·微服务·zookeeper·架构·go·consul
小马哥编程8 小时前
【iSAQB软件架构】架构决策记录-ADR
数据库·架构·系统架构·设计规范
木鱼时刻8 小时前
容器与 Kubernetes 基本概念与架构
容器·架构·kubernetes
华子w9089258599 小时前
基于 Python Django 和 Spark 的电力能耗数据分析系统设计与实现7000字论文实现
python·spark·django
zhuyasen10 小时前
定义即代码!这个框架解决了90%的Go开发者还在低效开发项目的问题
架构·go·gin
LCG元10 小时前
云原生微服务间的异步消息通信:最终一致性与系统容错的架构实战
微服务·云原生·架构