【架构-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:适合实时流处理和低延迟需求的场景,如实时监控、事件驱动应用等。
相关推荐
秋千码途2 分钟前
小架构step系列06:编译配置
架构
大数据CLUB42 分钟前
基于spark的奥运会奖牌变化数据分析
大数据·hadoop·数据分析·spark
打好高远球1 小时前
如何用AI破解相亲信息不对称
架构
泊浮目2 小时前
未来数据库硬件-网络篇
数据库·架构·云计算
鹏程十八少2 小时前
8.Android 设计模式 适配器模式 在商业项目中的落地
架构
不骞2 小时前
5.solidity的数据结构
架构
星辰大海的精灵2 小时前
使用Docker和Kubernetes部署机器学习模型
人工智能·后端·架构
魔镜魔镜_谁是世界上最漂亮的小仙女3 小时前
java-web开发
java·后端·架构
Edingbrugh.南空3 小时前
Flink ClickHouse 连接器维表源码深度解析
java·clickhouse·flink
Java烘焙师4 小时前
架构师必备:业务扩展模式选型
mysql·elasticsearch·架构·hbase·多维度查询