分布式实时消息队列Kafka(一)Kafka的介绍

简介: 分布式实时消息队列Kafka(一)Kafka的介绍

分布式实时消息队列Kafka(一)

知识点01:课程回顾

  1. Hbase是什么?
  • 分布式基于内存按列存储NoSQL数据库,用于实时、随机读写大量的数据
  1. Hbase的设计思想是什么?
  • 冷热数据分离
  • 热数据:大概可能被使用的数据,新产生的数据
  • 写入内存
  • 冷数据:小概率被读取的数据,产生一段时间的数据
  • 写入磁盘
  1. 什么是列族,为什么要设计列族?
  • 列族就是对列进行分组存储
  • Hbase是一个按列存储的数据库,每张表可以存储上百万列
  • 如果对列做了分组,加快数据读取的速度
  1. Hbase中的分区划分规则及数据分区规则分别是什么?
  • 分区划分规则:范围分区,根据rowkey的前缀将一个完整区间划分为多个连续范围区间
  • 数据分区规则:根据rowkey前缀匹配决定写入哪个分区
  1. Region的内部存储结构是什么?
  • Store:根据列族进行划分,加快数据读的效率,对分区内部的数据进行了划分
  • MemStore:内存存储区域,写入数据
  • StoreFile:内存溢写生成的数据文件
  1. 什么是热点问题?怎么解决热点?
  • 现象:当大量的请求全部集中在某个region或者regionserver中,出现了热点现象
  • 原因:数据集中写入了某个Region
  • 情况:表只有一个Region或者表有多个region,但是rowkey是连续的
  • 解决
  • 创建表的时候要做预分区
  • 设计Rowkey要构建散列
  1. Rowkey如何设计,设计规则是什么?
  • 长度原则:满足业务情况,长度越短越好
  • 组合原则:将最常用的几个条件字段组合构建rowkey
  • 业务原则:尽量贴合业务设计rowkey,将最常用的查询条件作为rowkey的前缀
  • 散列原则:构建不连续的Rowkey
  • 唯一原则:每一条Rowkey唯一对应一条数据
  1. 什么是二级索引?为什么要构建二级索引
  • Hbase使用Rowkey作为唯一索引,二级就是基于Rowkey之上构建一层索引
  • 只有按照rowkey的前缀查询才是走索引的查询,工作中大量的查询需求都不满足,只能走全表扫描,性能比较差
  • 如果构建二级索引,通过走两次索引代替全表扫描,提高查询性能
  1. 请简述Hbase写入数据的流程
  • step1:客户端连接ZK,获取meta表的地址,读取meta表的数据
  • step2:根据表名和rowkey,确定要写入的region的名称和地址
  • step3:请求对应RegionServer写入数据,先写入WAL
  • step4:根据列族来判断写入哪个Store中,写入对应的memstore
  1. MapReduce读取Hbase数据的原理及返回值是什么?
  • TableInputFormat:实现读取Hbase的数据
  • K:Rowkey的字节数组:ImmutableBytesWitale
  • V:Rowkey的所有数据:Result
  1. MapReduce写入Hbase的原理和要求是什么?
  • TableOutputFormat:实现写入数据到Hbase中
  • 要求:输出的Value类型必须为Put类型
  1. 什么是BulkLoad,用于什么场景解决什么问题?
  • Bulkload:是一种可以将数据直接转换为HFILE文件加载到Hbase表中的数据写入的方式
  • 数据不经过内存,直接写入HDFS,成为StoreFile文件
  • 大量数据并发写入hbase
  1. Java API
  • step1:构建连接
  • step2:根据操作要构建不同的对象
  • DDL:Admin
  • admin.createNamespace
  • admin.createTable
  • DML:Table
  • table.put(Put)
  • table.delete(Delete)
  • table.getScanner(Scan)
  • ResultScanner 【 Result 【 Cell 】】

知识点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:c

  • 目标掌握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

  • 目标掌握Kafka中的Offset概念及其功能
  • 路径

  • 实施
  • 定义
  • 功能
  • 生成
  • 举例
  • 假设一个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中的概念与其他工具的对比,加深理解
  • 路径
  • HDFS:分布式文件离线存储系统
  • Hbase:分布式NoSQL实时列存储数据库
  • Kafka:分布式实时消息队列系统
  • 实施
概念 HDFS Hbase Kafka
第一层逻辑划分
第二层逻辑划分
存储分区及划分规则
分区存储规则
分区安全
存储单元
架构
HA

概念 HDFS Hbase Kafka
第一层逻辑划分
第二层逻辑划分
存储分区及划分规则
分区存储规则
分区安全
存储单元
架构
HA
  • 小结


目录
相关文章
|
1月前
|
消息中间件 存储 大数据
Apache Kafka: 强大消息队列系统的介绍与使用
Apache Kafka: 强大消息队列系统的介绍与使用
|
1月前
|
消息中间件 存储 监控
RabbitMQ:分布式系统中的高效消息队列
RabbitMQ:分布式系统中的高效消息队列
|
1月前
|
消息中间件 存储 监控
消息队列:分布式系统中的重要组件
消息队列:分布式系统中的重要组件
|
1月前
|
消息中间件 存储 缓存
Kafka【基础知识 01】消息队列介绍+Kafka架构及核心概念(图片来源于网络)
【2月更文挑战第20天】Kafka【基础知识 01】消息队列介绍+Kafka架构及核心概念(图片来源于网络)
96 2
|
11天前
|
消息中间件 存储 Java
深度探索:使用Apache Kafka构建高效Java消息队列处理系统
【4月更文挑战第17天】本文介绍了在Java环境下使用Apache Kafka进行消息队列处理的方法。Kafka是一个分布式流处理平台,采用发布/订阅模型,支持高效的消息生产和消费。文章详细讲解了Kafka的核心概念,包括主题、生产者和消费者,以及消息的存储和消费流程。此外,还展示了Java代码示例,说明如何创建生产者和消费者。最后,讨论了在高并发场景下的优化策略,如分区、消息压缩和批处理。通过理解和应用这些策略,可以构建高性能的消息系统。
|
24天前
|
消息中间件 存储 负载均衡
消息队列学习之kafka
【4月更文挑战第2天】消息队列学习之kafka,一个分布式的,支持多分区、多副本,基于 Zookeeper 的分布式消息流平台。
17 2
|
2月前
|
消息中间件 存储 监控
美团面试:Kafka如何处理百万级消息队列?
美团面试:Kafka如何处理百万级消息队列?
135 1
|
3月前
|
消息中间件 Kafka
消息队列 MQ:构建高效、可扩展的分布式系统
消息队列 MQ:构建高效、可扩展的分布式系统
|
3月前
|
消息中间件 存储 Apache
消息队列进阶-2.分布式事务解决思路汇总
消息队列进阶-2.分布式事务解决思路汇总
73 0
|
3月前
|
消息中间件 监控 负载均衡
Kafka高级应用:如何配置处理MQ百万级消息队列?
在大数据时代,Apache Kafka作为一款高性能的分布式消息队列系统,广泛应用于处理大规模数据流。本文将深入探讨在Kafka环境中处理百万级消息队列的高级应用技巧。
178 0