简介
大多数企业依靠可扩展的平台和其服务或产品的数据化来保持市场竞争力。随着来自不同来源的数据的激增,其数量、速度和种类各不相同,企业需要新的数据战略。
因此,人们认为需要数据管道将来自所有不同来源的数据整合到一个共同的目的地,以便进行快速分析,或者在连接的应用程序和系统之间处理和流式传输数据。
这里简单解释两种经典数据处理架构和一个通用编程模型,并例举他们的组件和使用场景,最后做一个简单的功能对比。
1 为什么要数据处理框架
这些体系结构为处理、存储和分析数据提供了结构化框架,使开发人员能够构建可伸缩、高效和可靠的数据驱动应用程序。
以下是软件开发人员需要数据处理框架的一些具体原因:
- 实时数据处理
现代应用程序通常需要实时洞察数据,例如用户行为,物联网传感器读数和金融交易。像Kappa和Apache Beam这样的数据架构支持实时处理流数据,为开发人员提供了构建响应事件的应用程序的工具。
- 批处理数据处理
历史数据分析对于理解趋势、识别模式和做出明智决策至关重要。像Lambda和Apache Beam这样的数据架构支持批处理,允许开发人员有效地分析大型数据集,并从历史数据中提取有价值的见解。
- 数据一致性和完整性
维护数据一致性和完整性对于确保数据驱动的应用程序的可靠性至关重要。像Lambda和Apache Beam这样的数据架构提供了确保跨不同处理阶段的数据一致性的机制,从而防止数据丢失或损坏。
- 可伸缩性和性能
现代应用程序必须能够在不影响性能的情况下处理不断增长的数据量。像Kappa和Apache Beam这样的数据架构被设计为水平伸缩,使开发人员能够构建能够处理大数据量而没有性能瓶颈的应用程序。
- 灵活性和可重用性
像Apache Beam这样的数据架构为处理流数据和批处理数据提供了统一的框架,使开发人员能够跨不同的数据处理任务重用代码和组件。这减少了开发时间,提高了代码的一致性。
因此,数仓的这些框架提供了构建可伸缩、高效和可靠的数据驱动应用程序所需的工具和框架。支持实时数据处理、批处理数据分析、数据一致性和可伸缩性,使它们成为现代软件开发的必要条件。
2 常见数据处理架构
Kappa、Lambda 和 Beam 都是用于构建大数据应用的大数据架构。它们各有优缺点,适用于不同的场景。
2.1 流式的Kappa处理架构
kappa数据源可以是各种类型的流式数据,例如 Kafka、Kinesis、Apache Pulsar 等。
Kappa 是一个基于流式处理的架构,组件包括以下几个部分:
(1)实时层
- 处理输入数据,生成实时视图。
- 负责实时处理流式数据。流式处理系统可以是 Apache Spark Structured Streaming、Apache Flink、Apache Storm 等。
(2)服务层
- 使用实时视图中的结果数据集响应用户请求。存储系统可以是 Hadoop、HDFS、Amazon S3 等
Kappa具有以下优点:
实时性:Kappa 可以实时处理流式数据,适用于需要实时响应的应用场景。
可扩展性:Kappa 可以水平扩展,适用于需要处理大量数据的应用场景。
成本效益:Kappa 的成本效益高,适用于需要在预算范围内部署大数据应用的场景。
原理结构:
- 例子:
一个电商网站需要实时监控用户的购物行为,并根据用户的行为进行推荐。这种场景需要实时处理大量的数据,且预算有限。Kappa 架构可以满足这些需求,将用户的购物行为实时处理,并生成推荐结果。
2.2 混合流式批处理 Lambda 架构
(1)批处理层 Batch Layer 1 存储数据集,预计算查询函数,构建批视图,批处理层负责批量处理历史数据。批处理系统可以是 Apache Spark、Apache Hive、Apache Hadoop 等。 2 一般处理离线数据
(2)加速层 Speed Layer
1 处理最近的增量数据流,不断更新实时视图,加速系统可以是 Apache Spark Structured Streaming、Apache Flink、Apache Storm 等。 2 一般用于线上处理。
(3)服务层 Serving Layer
1 合并批视图和实时视图中的结果数据集到最终数据集,数据集存储系统可以是 Hadoop、HDFS、Amazon S3 等。
2 一般用于线上处理。
-
Lambda 是一个混合流式批处理的架构,具有以下优点:
兼顾实时性和批处理:Lambda 可以同时处理流式数据和批处理数据,兼顾了实时性和批处理的优势。 开发难度相对较低:Lambda 的开发难度相对较低,适合初学者使用。 维护成本相对较低:Lambda 的维护成本相对较低,不需要定期进行维护和升级。
- 例如
一个社交媒体网站需要实时处理用户的社交行为,并根据用户的行为进行社交推荐。这种场景需要兼顾实时性和批处理,且开发难度相对较低。
Lambda 架构可以满足这些需求,将用户的社交行为实时处理,并生成推荐结果。架构组件通常例如:
2.3 通用流数据处理Beam架构
Apache Beam是谷歌开源的数据管道框架,组织可开始根据其业务需求部署 Batch 或流式处理管道,是一种更通用的编程模型,可用于处理流数据和批处理数据。
它提供了一个统一的API,允许开发人员以可移植的方式定义数据处理管道,而不考虑底层执行引擎。对于需要处理这两种数据类型的应用程序,或者需要能够在不重写代码的情况下切换执行引擎的应用程序来说,这是一个很好的选择
- 数据源:
数据源是数据进入 Beam 架构的起点。数据源可以是各种类型的数据源,例如 Kafka、Kinesis、Apache Pulsar 等。
-
处理器: 处理器负责处理数据。处理器可以是用户自定义的处理器,也可以是 Beam 提供的标准处理器。
-
输出:
输出是处理后数据的输出目标。输出可以是各种类型的输出目标,例如 Kafka、Kinesis、Amazon S3 等。
2.3.1 组件
Beam的数据处理工作流图可以简单说明如下:
中间处理器可以使用如:python,go,java等通用语言调用其通用接口。
Apache Beam 抽象组件
- 管道
它封装了从某个外部源读取数据、转换数据并将输出保存到某个外部存储源的整个过程。
- 存储
它定义了管道运行的数据,它可以是有界数据,也可以是无界数据。我们根据来自任何外部系统的数据或内存中的数据创建 Pcollections。它是不可变的,必须包含相同类型的数据。
- 输入集 PTransforms(PTransforms)
它将 Pcollection(输入数据集)作为输入,对其应用一些处理函数并生成另一个 Pcollection(输出数据集)。
- 流水线 IO
它使您能够从各种外部存储系统读取或写入数据。
Beam 是一个通用的流式批处理的架构,具有以下优点:
支持多种数据源和数据处理框架:Beam 支持多种数据源和数据处理框架,适用于各种场景。
可扩展性强:Beam 的可扩展性强,适用于处理大量数据的应用场景。
开发效率高:Beam 的开发效率高,可以使用多种编程语言进行开发。
- 例子:
例如,一个金融机构需要处理大量的交易数据,并进行分析。这种场景需要支持多种数据源和数据处理框架,且可扩展性强。Beam 架构可以满足这些需求,将交易数据进行实时处理和批处理,并进行分析。
3 小结
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更复杂 |
使用场景 | 历史数据分析、数据仓库、实时分析 | 实时分析 | 历史,实时分析和数据管道 |