针对目前使用的技术,从原理上进行了解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技术的实时应用》