Nginx
Nginx是什么
是一个轻量级的高性能的http和反向代理的web服务器
功能集稳定、丰富、占用资源少/内存少
优点
高性能
可支持5w个并发链接相应
负载均衡
跨平台
c语言写的可移植
稳定性高
可以不间断运行,可以运行数月而不需要重启
占用资源少
百兆内存就可以支持上万的并发
功能多
web、cache、proxy
应用场景
HTTP服务
静态服务器
反向代理
代理服器接受客户端的请求,将请求发送给真正的服务器
把返回结果发送给客户端
客户端看不到真正的代理服务器
负载均衡
动静分离
把静态资源和动态资源分开,对静态资源进行缓存操作
Kakfka
简介
kafka是是一个分布式流平台,是一个基于发布/订阅模式的消息队列
用于实时流处理
消息队列
消息就是数据 消息队列就是数据队列
点对点模式
一对一,消费者主动消费数据,消费后清除消息,也就说一个消息只能被一个消费者消费
发布/订阅模式
一对多,消息推送给所有订阅者
为什么需要消息队列
- 缓冲
- 异步通讯
- 顺序保证
- 可恢复性
- 灵活性
- 扩展性
- 解耦
架构
-
Producer
生产者,生产数据,向broker发消息的客户端
-
Consumer
消费者,使用数据,从broker取消息
-
Topic
主题,一种数据的类别
-
Consumer Group
-
Broker
kafka服务器就是broker,多个broker组成Cluster
-
Partition
一个topic分解为多个partition以分布到多个broker,partition的数据都有有序的id(offset)。partition内的数据有序,partition之间无需。
-
Offset
就是文件数据的坐标
在kafka的文件格式是offset.kafka
分布式模型
-
topic多个partition的日志分布式地存储在集群上
-
每个分区都有多个副本,一个主副本,多个备份副本,当一个主副本死掉,一个备份副本会成为主副本
-
因为只有主副本能够读写,备份副本只能复制主副本的数据,所以对副本采用负债均衡的策略。
-
当生产者发布一个消息到主题,会根据消息的键选择分区,没有键就采用轮询方式的负载均衡选择分区
-
每个消费者会设置一个消息组,一个消息只会被消息队列中的一个消费者消费,要想实现发布/订阅模式,只需每个消息队列只有一个消费者
-
分区是消费的最小并行单元
Elasticsearch
概述
ES是一个高度可扩展的搜索分析引擎,
基本术语
-
NRT(Near Realtime近实时性)
有一点延迟
-
Cluster 集群
-
Node 节点
-
index 索引
相当与Mysql的table(表),当对文档进行增删改查操作时引用索引
-
Type 类型
-
Document 文档 row
文档用json表示,是被索引的基本数据单元
-
shards&Replicas 分片和复制
为什么分片
-
可以水平拆分/缩放内容量
-
可以跨分片分布和并行操作,从而提高性能/吞吐量
副本的意义
- 高可用
- 高并发
-
-
Field 字段
是json格式的
- 字符串 keyword,text
- 数值 byte、short、integer、long、float、double、half_float、scaled_float
- 布尔 boolean
- 日期 date
- 二进制 binary
- 范围 integer_range、float_range…
与数据库的对比
ES
容量较大
查询时效性 较高
查询灵活性 较好,关联查询弱,可以全文检索,可以处理
过滤、匹配、排序、聚合等操作
写入速度 较快
一致性、事物 弱
关于Lucene
Lucene是一个全文检索引擎工具包,它不是一个完整的全文检索引擎、而是一个框架、提供完整的查询引擎和索引引擎
ES和solr就是基于Lucene搭建的
Redis
概述
Redis是内存存储的数据结构服务器、可用于数据库、高速缓存和消息队列代理
支持多种数据类型 如字符串、哈希值、列表、集合、有序集合、位图、hyerloglog等数据类型。
功能:复制、Lua脚本、LRU回收、事物、磁盘持久化
特点
- 内存数据库、速度快、容量小、可扩展性低、可持久化到磁盘、重启时加载
- 不但支持kv类型的数据、还支持list、set、zset、hash等数据结构
- 支持数据备份 master-slave模式
- 支持事物
优势
- 性能极高 写速度 8w/s,读速度11w/s
- 丰富的数据类型
- Redis的原子操作,原子操作可以组合
- 支持 订阅/发布模式 key过期
应用场景
- 缓存
- 队列
- 计数
- 做排行榜
- 删除与过滤
- 显示最新的项目列表
SpringBoot
概述
SpringBoot改善了Spring配置麻烦的缺点,约定了配置,可以让开发人员更多的投入到逻辑代码
特点
-
基于Spring比Spring更简单
-
开箱即用,没有代码生成,无需xml配置,可以自定义默认的参数
-
并没有增强Spring,只是更方便使用
功能
-
起步依赖
就是把某些功能的坐标打包在一起,并且提供一些默认的功能
-
自动配置
是运行时的过程,确定Spring配置应该用那些
数据仓库
概述
数据仓库是一个面向主题的、集成的、相对稳定的
反应历史变化的数据集合,用于支持管理决策
数据仓库不是大型数据库,是为了前端查询和分析
特点
效率足够高
可以在24h、12小时内支持大量数据的分析
数据质量
即提供准确可靠的数据、因为数据仓库流程多会出现
脏数、数据失真的情况
扩展性
需要考虑到以后几年数据增长的情况
面向主题
排除对决策无用的数据、提供主题的简明试图
企业数仓库模型
数据仓库趋势
-
实时数据仓库满足实时性和自动化决策需求
-
大数据和数据湖以支持复杂数据类型(文本、图象视频、音频)
实时数仓
- 出现非结构化数据、数据量大
- 业务需要实时性、数据量大、人工难以处理、需要机器解决
需求的需求:实时产生结果、处理和保存大量异构数据
数据仓库的演变
早期 离线大数据架构 只是大数据工具替代传统数据
仓库的工具
发展 Lambda架构 增加加速层
最后 Kappa架构 真正的实时处理 架构发生改变
离线大数据架构
代表HDFS/Hive,ETL可以是MapReduce脚本和HiveSQL
- ODS 数据操作层 保存原始数据
- DWD 数据细分层 保存最细粒度的事实数据
- DM 在DWD的基础上做简单汇总
Lambda架构
Kappa架构
移除了Lambda架构中的批处理部分
修去修改和重处理都是通过上游重放完成
通过增加资源,解决流式重新处理吞吐量低的问题
重新处理过程
1.选择可以重放、能保存所有数据、支持多消费者的队列
如kafka
2.写一个新作业,在上游消息队列消费,结果写道下游表
3.当新作业赶上老作业,切换数据源。读取2中的结果表
4.停掉、删除老作业
架构对比
对比项 | Lambda架构 | Kappa架构 |
---|---|---|
实时性 | 实时 | 实时 |
计算资源 | 批和流同时运行,资源开销大 | 只有流处理,仅针对新需求开发阶段运行两个作业,资源开销小 |
重新计算时吞吐 | 批式全量处理,吞吐较高 | 流式全量处理,吞吐较批处理低 |
开发、测试 | 每个需求都需要两套不同代码,开发、测试、上线难度较大 | 只需实现一套代码,开发、测试、上线难度相对较小 |
运维成本 | 维护两套系统(引擎),运维成本大 | 只需维护一套系统(引擎),运维成本小 |
实时数仓与离线数仓对比
架构方面
实时 kappa架构 离线 传统大数据架构 lambda中间态
建设方面
都是传统的主题建模理论、只是实时的数据流中多了隐含的时间属性
数据保障
实时数仓要保证实时性、对数据量的变化敏感
项目背景
本项目是基于电商平台产生日志以及订单数据做的一个实时数仓分析系统
项目需求
- 实现当日首次登陆用户分时趋势图统计,即日活统计
- 当日订单交易数据与前天对比
Canel
概述
用于MySQL数据库增量日志解析,提供增量数据订阅和消费
提供增量数据订阅和消费业务包括
- 数据库镜像
- 数据库实时备份
- 索引构建和实时维护
- cache刷新
- 带业务逻辑的增量数据处理
MySQL的主从架构
- MySQL master将数据变更写进二进制日志
- slave将二进制日志拷贝到它的中继日志
- salve重放relay log中的事件
Canel架构
cannel伪装成Myqsl 的slave 发送dump协议
matser接收到协议 推送二进制日志给canel
canel解析二进制日志
MySQL的binlog
binlog是MySQL最重要的日志,记录了所有DDL和DML语句
以事件形式记录、
binlog的主要目的是复制和恢复
数据埋点
属性
设备属性 用户信息 软件信息
埋点数据格式
公共字段:安卓机包括的字段
业务字段:埋点上报的字段、有具体的业务类型
Kibana
概述
对ES数据进行可视化