知识点01:课程回顾
-
Hbase是什么?
- 分布式基于内存按列存储NoSQL数据库,用于实时、随机读写大量的数据
-
Hbase的设计思想是什么?
- 冷热数据分离
- 热数据:大概可能被使用的数据,新产生的数据
- 写入内存
- 冷数据:小概率被读取的数据,产生一段时间的数据
- 写入磁盘
-
什么是列族,为什么要设计列族?
- 列族就是对列进行分组存储
- Hbase是一个按列存储的数据库,每张表可以存储上百万列
- 如果对列做了分组,加快数据读取的速度
-
Hbase中的分区划分规则及数据分区规则分别是什么?
- 分区划分规则:范围分区,根据rowkey的前缀将一个完整区间划分为多个连续范围区间
- 数据分区规则:根据rowkey前缀匹配决定写入哪个分区
-
Region的内部存储结构是什么?
- Store:根据列族进行划分,加快数据读的效率,对分区内部的数据进行了划分
- MemStore:内存存储区域,写入数据
- StoreFile:内存溢写生成的数据文件
- Store:根据列族进行划分,加快数据读的效率,对分区内部的数据进行了划分
-
什么是热点问题?怎么解决热点?
-
现象:当大量的请求全部集中在某个region或者regionserver中,出现了热点现象
-
原因:数据集中写入了某个Region
-
情况:表只有一个Region或者表有多个region,但是rowkey是连续的
-
解决
-
创建表的时候要做预分区
-
设计Rowkey要构建散列
-
-
-
Rowkey如何设计,设计规则是什么?
- 长度原则:满足业务情况,长度越短越好
- 组合原则:将最常用的几个条件字段组合构建rowkey
- 业务原则:尽量贴合业务设计rowkey,将最常用的查询条件作为rowkey的前缀
- 散列原则:构建不连续的Rowkey
- 唯一原则:每一条Rowkey唯一对应一条数据
-
什么是二级索引?为什么要构建二级索引
- Hbase使用Rowkey作为唯一索引,二级就是基于Rowkey之上构建一层索引
- 只有按照rowkey的前缀查询才是走索引的查询,工作中大量的查询需求都不满足,只能走全表扫描,性能比较差
- 如果构建二级索引,通过走两次索引代替全表扫描,提高查询性能
-
请简述Hbase写入数据的流程
- step1:客户端连接ZK,获取meta表的地址,读取meta表的数据
- step2:根据表名和rowkey,确定要写入的region的名称和地址
- step3:请求对应RegionServer写入数据,先写入WAL
- step4:根据列族来判断写入哪个Store中,写入对应的memstore
-
MapReduce读取Hbase数据的原理及返回值是什么?
- TableInputFormat:实现读取Hbase的数据
- K:Rowkey的字节数组:ImmutableBytesWitale
- V:Rowkey的所有数据:Result
-
MapReduce写入Hbase的原理和要求是什么?
- TableOutputFormat:实现写入数据到Hbase中
- 要求:输出的Value类型必须为Put类型
-
什么是BulkLoad,用于什么场景解决什么问题?
- Bulkload:是一种可以将数据直接转换为HFILE文件加载到Hbase表中的数据写入的方式
- 数据不经过内存,直接写入HDFS,成为StoreFile文件
- 大量数据并发写入hbase
- Bulkload:是一种可以将数据直接转换为HFILE文件加载到Hbase表中的数据写入的方式
-
Java API
- step1:构建连接
- step2:根据操作要构建不同的对象
- DDL:Admin
- admin.createNamespace
- admin.createTable
- DML:Table
- table.put(Put)
- table.delete(Delete)
- table.getScanner(Scan)
- ResultScanner 【 Result 【 Cell 】】
- DDL:Admin
知识点02:课程目标
知识点03:传统架构面临的问题
-
目标:了解传统架构中存在的问题及解决方案
-
路径
- step1:传统网站的存储架构
- step2:高并发读问题
- step3:高并发写问题
-
实施
-
Web1.0版本的网站架构
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-p5EluYyo-1617011887967)(20210329_分布式实时消息队列Kafka(一).assets/image-20210328152427450.png)]
-
问题1:读的请求比较多,MySQL无法支撑这么大的读并发,怎么解决?
- 引入Redis,作为读缓存,解决高并发的读
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RaU9EfHR-1617011887969)(20210329_分布式实时消息队列Kafka(一).assets/image-20210328152502315.png)]
-
问题2:如果写的请求也比较多怎么办?
- 引入消息队列:解决高并发写问题
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wwEN0xMz-1617011887970)(20210329_分布式实时消息队列Kafka(一).assets/image-20210328153057313.png)]
-
-
小结
知识点04:消息队列:MQ介绍
-
目标:了解消息队列的功能,应用场景及特点
-
路径
- step1:消息队列是什么?
- step2:什么情况下需要使用消息队列?
- step3:消息队列的优缺点是什么?
-
实施
-
定义
- 官方定义:消息队列是一种异步的服务间通信方式,是分布式系统中重要的组件,主要解决应用耦合,异步消息,流量削锋等问题,实现高性能,高可用,可伸缩和最终一致性架构。
- 简单点说:消息队列MQ用于实现两个系统之间或者两个模块之间传递消息数据时,实现数据缓存
-
功能
- 基于队列的方式,实现数据缓存
-
应用场景
- 用于所有需要实现实时、高性能、高吞吐、高可靠的消息传递架构中
-
优点
- 实现了架构解耦
- 保证了最终一致性
- 实现异步,提供传输性能
-
缺点
- 增加了消息队列,架构运维更加复杂
- 数据保证更加复杂,必须保证生产安全和消费安全
-
定义
-
小结
知识点05:消息队列:同步与异步
-
目标:了解什么是同步与异步
-
路径
- step1:什么是同步与异步?
- step2:同步的特点和应用场景?
- step3:异步的特点和应用场景?
-
实施
-
同步的概念
- 流程
- step1:用户提交请求
- step2:后台处理请求
- step3:将处理的结果返回给用户
- 特点:用户看到的结果就是我处理好的结果
- 场景:去银行存钱、转账等,必须看到真正处理的结果才能表示成功,实现立即一致性
- 流程
-
异步的概念
- 流程
- step1:用于提交请求
- step2:后台将请求放入消息队列,等待处理,返回给用户一个临时结果
- step3:用户看到临时的结果,真正的请求在后台等待处理
- 特点:用户看到的结果并不是我们已经处理的结果
- 场景:用户暂时不需要关心真正处理结果的场景下,只要保证这个最终结果是用户想要的结果即可,实现最终一致性
- 流程
-
数据传递的同步与异步
- A给B发送消息:基于UDP协议
- A给B发送消息:基于TCP协议
-
同步的概念
-
小结
知识点06:消息队列:点对点模式
-
目标:了解消息队列中消息传递的点对点模式
-
路径
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BQ9B1LCt-1617011887972)(20210329_分布式实时消息队列Kafka(一).assets/image-20210328155147841.png)]
-
实施
- 角色
- 生产者
- 消息队列
- 消费者
- 流程
- step1:
- 角色
-
小结
知识点07:消息队列:订阅发布模式
-
目标:掌握消息队列中消息传递的订阅发布模式
-
路径
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mBtS5Xzf-1617011887972)(20210329_分布式实时消息队列Kafka(一).assets/image-20210328160643162.png)]
-
实施
- 角色
- 流程
-
小结
知识点08:Kafka的介绍
-
目标:掌握Kafka的功能、特点及应用场景
-
路径
- Kafka是什么?
- Kafka在大数据中的应用场景是什么?
-
实施
- 定义
- 应用场景
-
小结
知识点09:Kafka的特点
-
目标:掌握Kafka的特点
-
路径
- 为什么不用HDFS?
- 为什么不用Hbase?
- 为什么不用Zookeeper?
-
实施
- 高性能
- 高并发
- 高可靠
- 高吞吐
- 高安全性
- 高灵活性
-
小结
知识点10:Kafka概念:Producer、Broker、Consumer
-
目标:掌握Kafka中的Producer、Broker、Consumer概念及其功能
-
路径
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zYiLcyjL-1617011887973)(20210329_分布式实时消息队列Kafka(一).assets/image-20210328161427289.png)]
-
实施
-
Broker
-
Producer
-
Consumer
-
Consumer Group
-
-
小结
知识点11:Kafka概念:Topic、Partition
-
目标:掌握Kafka中的Topic、Partition概念及其功能
-
路径
-
实施
- Topic
- Partition
-
小结
知识点12:Kafka概念:分区副本机制
-
目标:掌握Kafka中的分区副本机制
-
路径
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-76LY04s2-1617011887974)(20210329_分布式实时消息队列Kafka(一).assets/image-20210328164309902.png)]
-
实施
-
小结
知识点13:Kafka概念:Segment
-
目标:掌握Kafka中的Segment概念及其功能
-
路径
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5wDx5Gs6-1617011887974)(20210329_分布式实时消息队列Kafka(一).assets/image-20210328164220108.png)]
-
实施
- 定义:对每个分区的数据进行了更细的划分,先写入的数据会先生成一个文件,存储到一定条件以后,将数据写入另外一个文件,每个文件就叫Segment文件
-
小结
知识点14:Kafka概念:Offset
-
目标:掌握Kafka中的Offset概念及其功能
-
路径
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PG0rMRXE-1617011887975)(20210329_分布式实时消息队列Kafka(一).assets/image-20210328163824722.png)]
-
实施
-
定义
-
功能
-
生成
-
举例
-
假设一个Topic有3个分区
-
现在往Topic中写入了10条数据
-
part0
offset K value 0 1 hadoop 1 4 hadoop 2 7 hadoop 3 10 hadoop
-
part1
offset K value 0 2 hadoop 1 5 hadoop 2 8 hadoop
-
part2
offset K value 0 3 hadoop 1 6 hadoop 2 9 hadoop
-
-
-
-
小结
知识点15:Kafka概念:概念对比总结
-
目标:掌握Kafka中的概念与其他工具的对比,加深理解
-
路径
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6n8rY5Z8-1617011887975)(20210329_分布式实时消息队列Kafka(一).assets/image-20210328162448721.png)]
-
HDFS:分布式文件离线存储系统
-
Hbase:分布式NoSQL实时列存储数据库
-
Kafka:分布式实时消息队列系统
-
-
实施
概念 HDFS Hbase Kafka 第一层逻辑划分 第二层逻辑划分 存储分区及划分规则 分区存储规则 分区安全 存储单元 架构 HA
概念 | HDFS | Hbase | Kafka |
---|---|---|---|
第一层逻辑划分 | |||
第二层逻辑划分 | |||
存储分区及划分规则 | |||
分区存储规则 | |||
分区安全 | |||
存储单元 | |||
架构 | |||
HA |
- 小结