1 简介
我们知道经典数据架构如kappa,lambda,它们利用数据管道整合多元数据源,便于分析和流转。Kappa架构专注于实时处理(如通过Kafka、Spark Streaming),适合实时响应场景;Lambda架构结合批处理与实时处理(如Spark、Hadoop与Flink),平衡实时性和批处理,易于开发和维护。
而本文介绍的Apache Beam提供统一模型,适用于流处理和批处理,提升代码复用和效率。这两种架构满足现代应用对数据一致、性能和灵活性的需求。它抽象出数据管道,允许在不同执行引擎(如Spark、Flink、Dataflow)上运行,简化了多源数据整合。Beam强调代码复用和效率,适用于需要高度灵活性和扩展性的场景,同时支持多种语言,如Python、Java。
2 通用流数据处理Beam架构
Apache Beam是谷歌开源的数据管道框架,组织可开始根据其业务需求部署 Batch 或流式处理管道,是一种更通用的编程模型,可用于处理流数据和批处理数据。
它提供了一个统一的API,允许开发人员以可移植的方式定义数据处理管道,而不考虑底层执行引擎。对于需要处理这两种数据类型的应用程序,或者需要能够在不重写代码的情况下切换执行引擎的应用程序来说,这是一个很好的选择
- 数据源:
数据源是数据进入 Beam 架构的起点。数据源可以是各种类型的数据源,例如 Kafka、Kinesis、Apache Pulsar 等。
处理器:
处理器负责处理数据。处理器可以是用户自定义的处理器,也可以是 Beam 提供的标准处理器。输出:
输出是处理后数据的输出目标。输出可以是各种类型的输出目标,例如 Kafka、Kinesis、Amazon S3 等。
3 组件
Beam的数据处理工作流图可以简单说明如下:
中间处理器可以使用如:python,go,java等通用语言调用其通用接口。
Apache Beam 抽象组件
- 管道
它封装了从某个外部源读取数据、转换数据并将输出保存到某个外部存储源的整个过程。
- 存储
它定义了管道运行的数据,它可以是有界数据,也可以是无界数据。我们根据来自任何外部系统的数据或内存中的数据创建 Pcollections。它是不可变的,必须包含相同类型的数据。
- 输入集 PTransforms(PTransforms)
它将 Pcollection(输入数据集)作为输入,对其应用一些处理函数并生成另一个 Pcollection(输出数据集)。
- 流水线 IO
它使您能够从各种外部存储系统读取或写入数据。
Beam 是一个通用的流式批处理的架构,具有以下优点:
支持多种数据源和数据处理框架:Beam 支持多种数据源和数据处理框架,适用于各种场景。
可扩展性强:Beam 的可扩展性强,适用于处理大量数据的应用场景。
开发效率高:Beam 的开发效率高,可以使用多种编程语言进行开发。
- 例子:
例如,一个金融机构需要处理大量的交易数据,并进行分析。这种场景需要支持多种数据源和数据处理框架,且可扩展性强。Beam 架构可以满足这些需求,将交易数据进行实时处理和批处理,并进行分析。
4 小结
Kappa、Lambda 和 Beam 各有优缺点,适用于不同的场景。
Kappa 适用于需要实时响应、处理大量数据且预算有限的场景。
Lambda 适用于兼顾实时性和批处理、开发难度相对较低且预算有限的场景。
Beam 适用于支持多种数据源和数据处理框架、可扩展性强且开发效率高且预算充足的场景。
在选择大数据架构时,需要根据具体的业务需求和场景进行综合考虑。其主要优势在于其可移植的 API 层,可以在各种执行引擎或运行器中执行。
各框架功能对比如下:
功能\框架 | Lambda | Kappa | Apache Beam |
---|---|---|---|
处理模型 | 混合(流+批处理) | 流处理 | 统一流和批处理 |
实时能力 | 高 | 非常高 | 高 |
批处理 | 是 | 是(有限) | 是 |
可扩展性 | 高 | 高 | 高 |
复杂性 | 中等 | 低 | 高 |
数据一致性 | 最终一致 | 强 | 强 |
体系结构 | 混合(Batch + Streaming) | 流处理 | 统一编程模型 |
执行引擎 | fixed (Apache Hadoop + Apache Spark) | fixed (Apache Flink) | Pluggable (Apache Spark, Apache Flink,谷歌Cloud Dataflow) |
优势 | 可扩展性,历史数据分析,实时处理 | 低延迟,实时处理 | 灵活性,可移植性 |
缺点 | 复杂性,不如Apache Beam灵活 | 用例有限,不如Apache Beam可扩展性 | 比Lambda或Kappa更复杂 |
使用场景 | 历史数据分析、数据仓库、实时分析 | 实时分析 | 历史,实时分析和数据管道 |