分布式实时消息队列Kafka(一)
知识点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版本的网站架构
- 问题1:读的请求比较多,MySQL无法支撑这么大的读并发,怎么解决?
- 引入Redis,作为读缓存,解决高并发的读
- 问题2:如果写的请求也比较多怎么办?
- 引入消息队列:解决高并发写问题
- 小结
知识点04:消息队列:MQ介绍
- 目标:了解消息队列的功能,应用场景及特点
- 路径
- step1:消息队列是什么?
- step2:什么情况下需要使用消息队列?
- step3:消息队列的优缺点是什么?
- 实施
- 定义
- 官方定义:消息队列是一种异步的服务间通信方式,是分布式系统中重要的组件,主要解决应用耦合,异步消息,流量削锋等问题,实现高性能,高可用,可伸缩和最终一致性架构。
- 简单点说:消息队列MQ用于实现两个系统之间或者两个模块之间传递消息数据时,实现数据缓存
- 功能
- 基于队列的方式,实现数据缓存
- 应用场景
- 用于所有需要实现实时、高性能、高吞吐、高可靠的消息传递架构中
- 优点
- 实现了架构解耦
- 保证了最终一致性
- 实现异步,提供传输性能
- 缺点
- 增加了消息队列,架构运维更加复杂
- 数据保证更加复杂,必须保证生产安全和消费安全
- 定义
- 小结
知识点05:消息队列:同步与异步
- 目标:了解什么是同步与异步
- 路径
- step1:什么是同步与异步?
- step2:同步的特点和应用场景?
- step3:异步的特点和应用场景?
- 实施
- 同步的概念
- 流程
- step1:用户提交请求
- step2:后台处理请求
- step3:将处理的结果返回给用户
- 特点:用户看到的结果就是我处理好的结果
- 场景:去银行存钱、转账等,必须看到真正处理的结果才能表示成功,实现立即一致性
- 流程
- 异步的概念
- 流程
- step1:用于提交请求
- step2:后台将请求放入消息队列,等待处理,返回给用户一个临时结果
- step3:用户看到临时的结果,真正的请求在后台等待处理
- 特点:用户看到的结果并不是我们已经处理的结果
- 场景:用户暂时不需要关心真正处理结果的场景下,只要保证这个最终结果是用户想要的结果即可,实现最终一致性
- 流程
- 数据传递的同步与异步
- A给B发送消息:基于UDP协议
- A给B发送消息:基于TCP协议
- 同步的概念
- 小结
知识点06:消息队列:点对点模式
- 目标:了解消息队列中消息传递的点对点模式
- 路径
- 实施
- 角色
- 生产者
- 消息队列
- 消费者
- 流程
- step1:
- 角色
- 小结
知识点07:消息队列:订阅发布模式
- 目标:掌握消息队列中消息传递的订阅发布模式
- 路径
- 实施
- 角色
- 流程
- 小结
知识点08:Kafka的介绍
- 目标:掌握Kafka的功能、特点及应用场景
- 路径
- Kafka是什么?
- Kafka在大数据中的应用场景是什么?
- 实施
- 定义
- 应用场景
- 小结
知识点09:Kafka的特点
- 目标:掌握Kafka的特点
- 路径
- 为什么不用HDFS?
- 为什么不用Hbase?
- 为什么不用Zookeeper?
- 实施
- 高性能
- 高并发
- 高可靠
- 高吞吐
- 高安全性
- 高灵活性
- 小结
知识点10:Kafka概念:Producer、Broker、Consumer
- 目标:掌握Kafka中的Producer、Broker、Consumer概念及其功能
- 路径
- 实施
- Broker
- Producer
- Consumer
- Consumer Group
- 小结
知识点11:Kafka概念:Topic、Partition
- 目标:掌握Kafka中的Topic、Partition概念及其功能
- 路径
- 实施
- Topic
- Partition
- 小结
知识点12:Kafka概念:分区副本机制
- 目标:掌握Kafka中的分区副本机制
- 路径 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7Hzk95MA-1625806073233)(20210329_分布式实时消息队列Kafka(一).assets/image-20210328164309902.png)]
- 实施
- 小结
知识点13:Kafka概念:Segment
- 目标:掌握Kafka中的Segment概念及其功能
- 路径
- 实施
- 定义:对每个分区的数据进行了更细的划分,先写入的数据会先生成一个文件,存储到一定条件以后,将数据写入另外一个文件,每个文件就叫Segment文件
- 小结
知识点14:Kafka概念:Offset
知识点15:Kafka概念:概念对比总结
- 目标:掌握Kafka中的概念与其他工具的对比,加深理解
- 路径
- 实施 概念HDFSHbaseKafka第一层逻辑划分第二层逻辑划分存储分区及划分规则分区存储规则分区安全存储单元架构HA
概念 | HDFS | Hbase | Kafka |
---|---|---|---|
第一层逻辑划分 | |||
第二层逻辑划分 | |||
存储分区及划分规则 | |||
分区存储规则 | |||
分区安全 | |||
存储单元 | |||
架构 | |||
HA |
- 小结