数据过载问题:传统应用直接访问数据库,用户访问量增加时数据库无法支撑负载,出现超时错误。常用解决方法 5 种:
大数据特点:体量大、时效性强,并非构造单调而是类型多样;重在发掘数据间的相关性而非传统逻辑上的因果关系;目的和价值在于发现新知识、洞悉并科学决策。
现代大数据处理技术 3 类:① 基于分布式文件系统 Hadoop;② 使用 Map/Reduce 或 Spark 数据处理技术;③ 使用 Kafka 数据传输消息队列及 Avro 二进制格式。
大数据利用过程 4 步:采集 → 清洗 → 统计 → 挖掘。
大数据处理系统面临的挑战:① 如何处理非结构化和半结构化数据;② 如何探索大数据复杂性、不确定性特征描述的刻画方法及系统建模;③ 数据异构性与决策异构性对知识发现与管理决策的影响。
应具有的属性特征:鲁棒性和容错性、低延迟、横向扩展、通用、可扩展、即席查询(用户按自己的要求进行查询)、最少维护、可调试。
Lambda 架构是用于同时处理离线和实时数据的、可容错、可扩展的分布式系统,分三层:
| 层 | 核心功能 | 架构实现 |
|---|---|---|
| ① 批处理层 | 存储主数据集(具有原始、不可变、真实的特征),周期性将增量数据转储至主数据集并执行批处理,生成批视图 | Hadoop HDFS 或 HBase 存储主数据集;Spark 或 MapReduce 执行周期批处理并创建批视图 |
| ② 加速层 | 处理增量实时数据,生成实时视图,快速执行即席查询 | HDFS/HBase 存储实时数据;Spark 或 Storm 实现实时处理 |
| ③ 服务层 | 响应用户请求,合并批视图和实时视图的结果数据集得到最终数据集 | HBase 或 Cassandra 作服务层,Hive 创建可查询视图 |
优点:容错性好、查询灵活度高、弹性伸缩、易于扩展。缺点:编码量大、持续处理成本高、重新部署和迁移成本高。
与 Lambda 相似的模式:事件溯源模式、命令查询职责分离(CQRS)模式。
Kappa 架构在 Lambda 基础上优化,删除了批处理层(Batch Layer),将数据通道以消息队列替代,只分两层:
| 层 | 核心功能 | 架构实现 |
|---|---|---|
| ① 实时层 | 处理输入数据,生成实时视图——流式处理引擎逐条处理 | Apache Kafka 回放(重放历史)数据,Flink 或 Spark Streaming 处理 |
| ② 服务层 | 使用实时视图中的结果数据集响应用户请求 | 实践中使用数据湖中的存储作为服务层 |
本质:通过改进 Lambda 的加速层,使它既能进行实时数据处理,也有能力在业务逻辑更新时重新处理以前处理过的历史数据(靠 Kafka 日志可重放)。
优点:将离线和实时处理代码统一,方便维护。缺点:消息中间件有性能瓶颈、数据关联时处理开销大、抛弃了离线计算的可靠性。
常见变形:Kappa+ 架构;混合分析系统 Kappa 架构(源数据 → Kafka → Flink → ElasticSearch)。
| 对比内容 | Lambda 架构 | Kappa 架构 |
|---|---|---|
| 复杂度与开发维护成本 | 维护两套系统(引擎),复杂度高,成本高 | 维护一套系统(引擎),复杂度低,成本低 |
| 计算开销 | 周期性批处理计算 + 持续实时计算;计算开销大 | 必要时进行全量计算;计算开销相对较小 |
| 实时性 | 满足实时性 | 满足实时性 |
| 历史数据处理能力 | 批式全量处理,吞吐量大,历史数据处理能力强 | 流式全量处理,吞吐量相对较低,历史数据处理能力相对较弱 |
| 一致性问题 | 批视图与实时视图存在冲突可能(结果可能不一致) | 统一流处理,无两视图冲突 |
选型决策四因素:
| 设计考虑 | 选 Lambda | 选 Kappa |
|---|---|---|
| 业务需求与技术要求 | 依赖 Hadoop、Spark、Storm 技术 | 依赖 Flink 计算引擎,偏流式计算 |
| 复杂度 | 实时处理和离线处理结果可能不一致(可接受) | 频繁修改算法模型参数(重放即可生效) |
| 开发维护成本 | 成本预算充足 | 成本预算有限 |
| 历史数据处理能力 | 频繁使用海量历史数据 | 仅使用小规模数据集 |
| 案例 | 架构 | 关键实现 |
|---|---|---|
| ① 大规模视频网络(奥运会直播平台) | Lambda | 数据采集层(Flume/ETL/采集端)→ 数据集成层(Kafka 实时 + Sqoop 离线)→ 数据存储层(MemSQL/HBase/HDFS)→ 数据计算层分三部分:离线计算(Spark、MapReduce 周期批处理,Impala/Hive 建数仓写入 HDFS)、实时计算(Spark Streaming 只处理实时增量,更新实时视图)、合并计算(合并两视图写入 HBase 响应查询)→ 数据展现层 |
| ② 广告平台 | Lambda | 批处理层:凌晨将 Kafka 浏览/下单消息同步到 HDFS → 解析为 Hive 表 → HQL/Spark SQL 计算分区统计 → 转储 MySQL 作批视图;加速层:Spark Streaming 实时监听 Kafka 消息,计算追踪链接维度实时数据存 Redis 作实时视图;服务层:Java Web 服务提供 HTTP 接口,读 MySQL 批视图 + Redis 实时视图 |
| ③ 证券公司智能决策大数据系统 | Kappa | 实时日志分析平台:日志采集(Filebeat 实时采集推送 Kafka 缓存)→ 日志清洗解析(Flink 实时读取 Kafka,解析日志文本转成指标)→ 日志存储(日志转储 ElasticSearch,指标转储 OpenTSDB)→ 日志监控(单独告警消息队列,保持监控消息时序管理和实时推送) |
| ④ 电商智能决策大数据系统 | Kappa | 统一数据处理引擎 Funk 实时处理流数据,存储到 Hive 与分布式缓存 Tair:数据采集(B 端采集点击/下单/广告曝光/出价推送 Kafka)→ 数据清洗聚合(Flink 按需过滤转指标)→ 数据存储(计算结果转 Hive 日志库,模型参数转 Tair 缓存)→ 后续决策服务从 Tair 取数做模型训练 |