大数据架构之Lambda架构

针对目前使用的技术,从原理上进行了解lambda架构,以及对应的技术栈
和Kappa架构

Lambda架构

 函数表达的方式-
     1.query = function(all data)
     2. batch view = function(all data)
           query = function(batch view)
     3.  batch view = function(all data)
          realtime view = function(realtime view,  new data)
          query = function(batch view, realtime view)
01.数据采集层
 数据源   :Data Source 
    外部数据源: 目录/文件、 数据库、Web服务
    数据采集-日志采集技术
    数据传输体系--数据同步
 数据消费层: Data Consumption Layer  
          功能:封装异构数据源,转换成进一步使用的标准格式
          技术:Kafka  
02.数据计算层
         batch view = function(all data)
         realtime view = function(realtime view,  new data)
         query = function(batch view, realtime view)
   批处理层--离线
           批处理 -1.存储主数据集 2.计算任意视图
               批处理视图(Batch View)-从预先计算好的视图中读取计算结果
               1.存储主数据集
                    Hadoop/HDFS  --维护主数据,只允许追加的当时增长
                2.计算任意视图 
                   MapReduce -- Pig
                   Spark    --  Spark SQL
                   Hive
                   管道图--                        
            离线数据存储
                 01.分布式文件系统 存储主数据集 HDFS
                 02. NoSQL
   实时层--速度层-流
         实时计算:支持随机读取和随机写入的数据库
              同步架构和异步架构
                 队列处理 --单消费队列和多消费队列
                 流处理 -- Storm模型
                     Storm ---   Storm SQL
                          Storm SQL  -- Storm SQL is an experimental feature
                     Spark Streaming  -- Structured Streaming
                        01.Spark Streaming  
                       02.Structured Streaming -- 将流式计算也统一到DataFrame,
                         Structured Streaming - Input Sources 输入源  SparkSession.readStream() 2.1.2就有Kafka的了
          实时数据仓库
    数据整合以及管理体系
       处理语义规范化和不变性
03.服务层
   01.获取或者组合来自批处理和实时层的数据,并想用户提供组合视图
          ElephantDB
          Hbase、Redis 、MongoDB
          ElasticSearch
          MySQL、Oracle、SQLite
    接口服务化方式

04.数据应用层
    数据服务平台--数据营销平台、数据报表体系

说明
 批处理层使用精确算法和实时层采用计算算法,并且批处理层多次重写实时层
 系统显示最终准确性的属性,以此达到准确性、性能和鲁棒性的平衡

主数据集 --作为大数据系统计算结果的来源,主数据集
 主数据集的数据模型设计  --带有时间戳的、不断额外增加的不可变的数据
     01.数据是原始的
     02.数据是不可变的--不会更新或者删除数据,只是添加更多的数据,使用新记录来表示更改信息
          容忍人为错误--简易
          每次用户信息发生变化是,就会创建一条单独的记录,
                 同时需要跟踪用户信息的每个字段,以及将每个数据的单元和一个时刻连接在一起
         查询措施: 查询所有数据,并选择最近时间戳的数据
         代价是: 存储了所有时间段的事件而不是系统的当前状态,所以比可变模式使用了更多的存储
 物理存储主数据集

为什么采用lambda架构

01. 先看看之前的这些架构,看看这些过去面对的问题,以及解决问题时的取舍。
关系型数据库--查询是直接在数据存储层执行的,需要考虑查询的效率和数据一致性的重要性
复杂性如此根深蒂固以至于人们认为无法避免它
    处理任何一种复杂性的最好方式是完全摆脱/替换这种复杂性
02.传统方式构建的数据系统   
 会遇到可扩展性和复杂性问题
     1.数据量变大: 01.用队列扩展--02.通过数据库分片进行扩展
    2.容错 --数据库出现故障
03数据系统特性:
    01.鲁棒性和容错性
    02.简单- 开发以及应用 --可调试,可追踪
    维护--减少维护的重要途径-依赖简单的算法和组件来降低实现实现复杂性
    03.一致性和高可用
    04. 准确性、延迟和吞吐量
    05.可扩展性以及分布式
04.大数据数据系统-Lambda架构
   01.系统对机器故障和人为错误具有应对方式
      即:机器故障和人为错误不可避免的会在生产环境中出现
    应对方式:防御型编程,预防和恢复。提供一个清晰简单的恢复机制
   02.对分布式特性自我感知,自主处理分片、副本和分布式查询
   03.扩展可以水平扩展
   04.存储原始数据,使数据不可变

Kappa架构
 Kappa架构的核心思想包括以下三点:
    01.用Kafka或者类似的分布式队列系统保存数据,你需要几天的数据量就保存几天。
    02.当需要全量重新计算时,重新起一个流计算实例,从头开始读取数据进行处理,
      并输出到一个新的结果存储中。
    03.当作业完成时,让应用程序直接读取新的数据记录表。
     04.停止历史作业,删除旧的数据输出表。
    说明:
      不像是批处理架构,把数据存储到HDFS上,然后在上面执行各种跑批任务。
       流处理架构把数据存储到可扩展的消息或者日志队列
        01.没有批处理层。
       这就要求消息层能够存储、供应海量数据,并且具有强大有效的流处理器来处理此过程。
       02.将默认的方法“存储和处理”切换为“流和处理”
 技术方案
    Flink
命令查询职责分离-架构
        CQRS(Command Query Responsibility Segregation),命令查询职责分离)架构

参考

《大数据系统构建:可扩展实时数据系统构建原理与最佳实践 》
《实时大数据分析:基于Storm、Spark技术的实时应用》

blogroll

social