如何设计一套lambda数据平台架构

151 阅读3分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第13天,点击查看活动详情

1.问题

题目如下:

你是某互联网公司的大数据平台架构师,请设计一套基于 Lambda 架构的数据平台架构,要求尽可能多的把课程中涉及的组件添加到该架构图中。并描述 Lambda 架构的优缺点,要求不少于 300 字。

2.解答

lambda的架构图如下: 大数据架构图.png

该架构从左至右依次为:

  • 数据采集层: 负责数据采集。需要支持采集的数据有,各类DB数据库,文件系统,FTP,http协议,AMQP协议,以及MQTT协议。还包括DB-CDC,即数据库的CDC功能。
  • 数据缓存层:这一层的主要目的是缓存数据,解决数据采集到数据存储层写入数据的速度不一致问题。数据采集的速度是业务生产的速度,速度不一,高峰期可能速度快,而数据存储的写入速度是恒定的。在此处用一个生产者消费者模型。
  • 数据存储层:用以存储数据。包括HDFS、Hbase、ElasticSearch、Redis、PG、GP、Mysql等各种关系数据库。
  • 离线计算平台:离线计算可以采用Hadoop的MapReduce或者Tez以及Spark等技术。
  • 实时计算平台:采用Storm、Spark-stremming或者Flink技术。
  • OLAP:存储计算结果,用于OLAP分析,可以采用Presto、Impala、Clickhouse、Kylin、Druid、Doris、StarRocks等技术。

Lambda 架构(Lambda Architecture)是由 Twitter 工程师南森·马茨(Nathan Marz)提出的大数据处理架构。这一架构的提出基于马茨在 BackType 和 Twitter 上的分布式数据处理系统的经验。Lambda 架构使开发人员能够构建大规模分布式数据处理系统。它具有很好的灵活性和可扩展性,也对硬件故障和人为失误有很好的容错性。

Lambda 架构包含三层,分别是Batch Processing Layer(批处理层)、Speed (Real-Time) Processing Layer(速度处理层)、Serving Layer(服务层)。

Lambda 架构结合了批处理和流处理的架构思想,将进入系统的大规模数据同时送入这两套架构层中,分别是批处理层(Batch Layer)和速度层(Speed Layer),同时产生两套数据结果并存入服务层。批处理层有着很好的容错性,同时也因为保存着所有的历史记录,使产生的数据集具有很好的准确性。速度层可以及时地处理流入的数据,因此具有低延迟性。最终服务层将这两套数据结合,并生成一个完整的数据视图提供给用户。Lambda 架构也具有很好的灵活性,你可以将现有开源生态圈中不同的平台套入这个架构。

Lambda 架构也存在着一些不足:

  • 主要表现在它的维护很复杂,要同时维护两套系统架构:批处理层和速度层。
  • 资源占用增多,同样的逻辑需要计算两次。
  • 离线链路和实时链路数据差异会让业务方困惑,批量和实时的数据结果有时不对应。